Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a9dbb9306a | |||
| 602b1fc8e7 | |||
| daed472b46 | |||
| d9eda8c725 | |||
| 156f786448 | |||
| 9e80c2c028 | |||
| 816b7951fb |
@@ -0,0 +1,76 @@
|
|||||||
|
name: Release Creation
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "💡 The ${{ gitea.repository }} repository will be cloned to the runner."
|
||||||
|
|
||||||
|
- uses: RouxAntoine/checkout@v3.5.4
|
||||||
|
|
||||||
|
# get part of the tag after the `v`
|
||||||
|
- name: Extract tag version number
|
||||||
|
id: get_version
|
||||||
|
uses: battila7/get-version-action@v2
|
||||||
|
|
||||||
|
# Substitute the Manifest and Download URLs in the module.json
|
||||||
|
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||||
|
id: sub_manifest_link_version
|
||||||
|
uses: microsoft/variable-substitution@v1
|
||||||
|
with:
|
||||||
|
files: 'module.json'
|
||||||
|
env:
|
||||||
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
|
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json
|
||||||
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip
|
||||||
|
|
||||||
|
# Set up Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
- run: |
|
||||||
|
apt update -y
|
||||||
|
apt install -y zip
|
||||||
|
|
||||||
|
- run: node scripts/package.mjs
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
run: |
|
||||||
|
# Upload module.zip
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "Authorization: token ${{secrets.ALLOW_PUSH_RELEASE}}" \
|
||||||
|
--data-binary @./module.zip \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.zip"
|
||||||
|
|
||||||
|
# Upload module.json
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: token ${{secrets.ALLOW_PUSH_RELEASE}}" \
|
||||||
|
--data-binary @./module.json \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.json"
|
||||||
|
|
||||||
|
- name: Publish to Foundry server
|
||||||
|
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
|
||||||
|
id: 'scrying-pool'
|
||||||
|
version: ${{gitea.event.release.tag_name}}
|
||||||
|
manifest: 'https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json'
|
||||||
|
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip'
|
||||||
|
compatibility-minimum: '14'
|
||||||
|
compatibility-verified: '14'
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
name: Release Creation
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "💡 The ${{ gitea.repository }} repository will be cloned to the runner."
|
||||||
|
|
||||||
|
- uses: RouxAntoine/checkout@v3.5.4
|
||||||
|
|
||||||
|
# get part of the tag after the `v`
|
||||||
|
- name: Extract tag version number
|
||||||
|
id: get_version
|
||||||
|
uses: battila7/get-version-action@v2
|
||||||
|
|
||||||
|
# Substitute the Manifest and Download URLs in the module.json
|
||||||
|
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||||
|
id: sub_manifest_link_version
|
||||||
|
uses: microsoft/variable-substitution@v1
|
||||||
|
with:
|
||||||
|
files: 'module.json'
|
||||||
|
env:
|
||||||
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
|
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json
|
||||||
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip
|
||||||
|
|
||||||
|
# Set up Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
- run: |
|
||||||
|
apt update -y
|
||||||
|
apt install -y zip
|
||||||
|
|
||||||
|
- run: node scripts/package.mjs
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
run: |
|
||||||
|
# Upload module.zip
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.zip \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.zip"
|
||||||
|
|
||||||
|
# Upload module.json
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: token ${{secrets.ALLOW_PUSH_RELEASE}}" \
|
||||||
|
--data-binary @./module.json \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.json"
|
||||||
|
|
||||||
|
- name: Publish to Foundry server
|
||||||
|
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
|
||||||
|
id: 'scrying-pool'
|
||||||
|
version: ${{gitea.event.release.tag_name}}
|
||||||
|
manifest: 'https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json'
|
||||||
|
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip'
|
||||||
|
compatibility-minimum: '14'
|
||||||
|
compatibility-verified: '14'
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
name: Release Creation
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "💡 The ${{ gitea.repository }} repository will be cloned to the runner."
|
||||||
|
|
||||||
|
- uses: RouxAntoine/checkout@v3.5.4
|
||||||
|
|
||||||
|
# get part of the tag after the `v`
|
||||||
|
- name: Extract tag version number
|
||||||
|
id: get_version
|
||||||
|
uses: battila7/get-version-action@v2
|
||||||
|
|
||||||
|
# Substitute the Manifest and Download URLs in the module.json
|
||||||
|
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||||
|
id: sub_manifest_link_version
|
||||||
|
uses: microsoft/variable-substitution@v1
|
||||||
|
with:
|
||||||
|
files: "module.json"
|
||||||
|
env:
|
||||||
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
|
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json
|
||||||
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip
|
||||||
|
|
||||||
|
# Set up Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
- run: |
|
||||||
|
apt update -y
|
||||||
|
apt install -y zip
|
||||||
|
|
||||||
|
- run: node scripts/package.mjs
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
run: |
|
||||||
|
# Upload module.zip
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.zip \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.zip"
|
||||||
|
|
||||||
|
# Upload module.json
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.json \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.json"
|
||||||
|
|
||||||
|
- name: Publish to Foundry server
|
||||||
|
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
|
||||||
|
id: "scrying-pool"
|
||||||
|
version: ${{gitea.event.release.tag_name}}
|
||||||
|
manifest: "https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json"
|
||||||
|
notes: "https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip"
|
||||||
|
compatibility-minimum: "14"
|
||||||
|
compatibility-verified: "14"
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
name: Release Creation
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "💡 The ${{ gitea.repository }} repository will be cloned to the runner."
|
||||||
|
|
||||||
|
- uses: RouxAntoine/checkout@v3.5.4
|
||||||
|
|
||||||
|
# get part of the tag after the `v`
|
||||||
|
- name: Extract tag version number
|
||||||
|
id: get_version
|
||||||
|
uses: battila7/get-version-action@v2
|
||||||
|
|
||||||
|
# Substitute the Manifest and Download URLs in the module.json
|
||||||
|
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||||
|
id: sub_manifest_link_version
|
||||||
|
uses: microsoft/variable-substitution@v1
|
||||||
|
with:
|
||||||
|
files: "module.json"
|
||||||
|
env:
|
||||||
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
|
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json
|
||||||
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip
|
||||||
|
|
||||||
|
# Set up Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
- run: |
|
||||||
|
apt update -y
|
||||||
|
apt install -y zip
|
||||||
|
|
||||||
|
- run: node scripts/package.mjs
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
run: |
|
||||||
|
# Upload module.zip
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.zip \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.zip"
|
||||||
|
|
||||||
|
# Upload module.json
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.json \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.json"
|
||||||
|
|
||||||
|
- name: Publish to Foundry server
|
||||||
|
uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
|
||||||
|
id: "scrying-pool"
|
||||||
|
version: ${{gitea.event.release.tag_name}}
|
||||||
|
manifest: "https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json"
|
||||||
|
notes: "https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip"
|
||||||
|
compatibility-minimum: "14"
|
||||||
|
compatibility-verified: "14"
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
name: Release Creation
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "💡 The ${{ gitea.repository }} repository will be cloned to the runner."
|
||||||
|
|
||||||
|
- uses: RouxAntoine/checkout@v3.5.4
|
||||||
|
|
||||||
|
# get part of the tag after the `v`
|
||||||
|
- name: Extract tag version number
|
||||||
|
id: get_version
|
||||||
|
uses: battila7/get-version-action@v2
|
||||||
|
|
||||||
|
# Substitute the Manifest and Download URLs in the module.json
|
||||||
|
- name: Substitute Manifest and Download Links For Versioned Ones
|
||||||
|
id: sub_manifest_link_version
|
||||||
|
uses: microsoft/variable-substitution@v1
|
||||||
|
with:
|
||||||
|
files: "module.json"
|
||||||
|
env:
|
||||||
|
version: ${{steps.get_version.outputs.version-without-v}}
|
||||||
|
url: https://www.uberwald.me/gitea/${{gitea.repository}}
|
||||||
|
manifest: https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json
|
||||||
|
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip
|
||||||
|
|
||||||
|
# Set up Node.js
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: https://github.com/actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
# Create a zip file with all files required by the module to add to the release
|
||||||
|
- run: |
|
||||||
|
apt update -y
|
||||||
|
apt install -y zip
|
||||||
|
|
||||||
|
- run: node scripts/package.mjs
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
run: |
|
||||||
|
# Upload module.zip
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.zip \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.zip"
|
||||||
|
|
||||||
|
# Upload module.json
|
||||||
|
curl -s -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: token ${{secrets.RELEASE_SCRYING_POOL}}" \
|
||||||
|
--data-binary @./module.json \
|
||||||
|
"https://www.uberwald.me/api/v1/repos/${{gitea.repository}}/releases/${{gitea.event.release.id}}/assets?name=module.json"
|
||||||
|
|
||||||
|
# - name: Publish to Foundry server
|
||||||
|
# uses: https://github.com/djlechuck/foundryvtt-publish-package-action@v1
|
||||||
|
# with:
|
||||||
|
# token: ${{ secrets.FOUNDRYVTT_RELEASE_TOKEN }}
|
||||||
|
# id: "scrying-pool"
|
||||||
|
# version: ${{gitea.event.release.tag_name}}
|
||||||
|
# manifest: "https://www.uberwald.me/gitea/public/${{gitea.repository}}/releases/download/latest/module.json"
|
||||||
|
# notes: "https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{gitea.event.release.tag_name}}/module.zip"
|
||||||
|
# compatibility-minimum: "14"
|
||||||
|
# compatibility-verified: "14"
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14 — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packs": [
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lang": "es",
|
||||||
|
"name": "Spanish",
|
||||||
|
"path": "lang/es.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lang": "fr",
|
||||||
|
"name": "French",
|
||||||
|
"path": "lang/fr.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"id": "scrying-pool",
|
||||||
|
"title": "Scrying Pool",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Morr"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"compatibility": {
|
||||||
|
"minimum": "14",
|
||||||
|
"verified": "14"
|
||||||
|
},
|
||||||
|
"esmodules": [
|
||||||
|
"module.js"
|
||||||
|
],
|
||||||
|
"styles": [
|
||||||
|
"styles/scrying-pool.css"
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lang": "fr",
|
||||||
|
"name": "French",
|
||||||
|
"path": "lang/fr.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"url": "${url}",
|
||||||
|
"manifest": "${manifest}",
|
||||||
|
"download": "${download}",
|
||||||
|
"flags": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
# Scrying Pool Documentation Pack
|
||||||
|
|
||||||
|
✅ **Compendium is now built and ready!**
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
- `scrying-pool-docs.db` - **Pre-built SQLite compendium database** (20KB)
|
||||||
|
- `scrying-pool-guide.json` - Source JournalEntry content (English & French)
|
||||||
|
- `assets/` - Screenshot images (5 JPG files)
|
||||||
|
|
||||||
|
## What's Included
|
||||||
|
|
||||||
|
The `scrying-pool-docs.db` file contains a **JournalEntry** with:
|
||||||
|
- **2 pages**: English and French documentation
|
||||||
|
- **Professional styling** with CSS
|
||||||
|
- **5 screenshot references** (screenshot-main.jpg, screenshot-directors-board.jpg, etc.)
|
||||||
|
|
||||||
|
## Current Setup
|
||||||
|
|
||||||
|
The `module.json` defines the pack:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"packs": [
|
||||||
|
{
|
||||||
|
"name": "scrying-pool-documentation",
|
||||||
|
"label": "Scrying Pool Documentation",
|
||||||
|
"path": "packs/scrying-pool-docs.db",
|
||||||
|
"system": "",
|
||||||
|
"type": "JournalEntry"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When the module is installed in FoundryVTT, the **"Scrying Pool Documentation"** compendium will appear under the **Modules** tab with the JournalEntry already populated.
|
||||||
|
|
||||||
|
## Updating the Documentation
|
||||||
|
|
||||||
|
To update the documentation content:
|
||||||
|
|
||||||
|
### Option 1: Using the build script (Recommended)
|
||||||
|
```bash
|
||||||
|
# Edit the JSON source
|
||||||
|
nano packs/scrying-pool-guide.json
|
||||||
|
|
||||||
|
# Rebuild the database
|
||||||
|
node scripts/build-compendium.cjs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 2: Manual SQLite editing
|
||||||
|
```bash
|
||||||
|
sqlite3 packs/scrying-pool-docs.db
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option 3: Using fvtt-cli (Alternative)
|
||||||
|
```bash
|
||||||
|
npm install -g @foundryvtt/fvtt-cli
|
||||||
|
fvtt-cli pack create \
|
||||||
|
--input packs/scrying-pool-guide.json \
|
||||||
|
--output packs/scrying-pool-docs.db \
|
||||||
|
--type JournalEntry
|
||||||
|
```
|
||||||
|
|
||||||
|
## File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
packs/
|
||||||
|
├── scrying-pool-docs.db # SQLite database (compendium)
|
||||||
|
├── scrying-pool-guide.json # Source JSON (for editing)
|
||||||
|
├── README.md # This file
|
||||||
|
└── assets/
|
||||||
|
├── README.md
|
||||||
|
├── screenshot-main.jpg
|
||||||
|
├── screenshot-directors-board.jpg
|
||||||
|
├── screenshot-player-view.jpg
|
||||||
|
├── screenshot-presets.jpg
|
||||||
|
└── screenshot-badge-states.jpg
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
- **Database**: SQLite3 with WAL mode enabled
|
||||||
|
- **Table**: `JournalEntry` with FoundryVTT v14 schema
|
||||||
|
- **JournalEntry ID**: `scrying-pool-guide`
|
||||||
|
- **Name**: "Scrying Pool - User Guide / Guide de l'utilisateur"
|
||||||
|
- **Pages**: 2 (English and French)
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Scrying Pool — Agent Instructions
|
||||||
|
|
||||||
|
FoundryVTT v14 module for GM camera visibility control. Ships as raw ES modules (no bundler). Entry: `module.js` → `module.json:esmodules`.
|
||||||
|
|
||||||
|
## Commands (run in order: lint → typecheck → test → build)
|
||||||
|
|
||||||
|
| Intent | Command |
|
||||||
|
|--------|---------|
|
||||||
|
| Lint | `npm run lint` |
|
||||||
|
| Typecheck | `npm run typecheck` |
|
||||||
|
| Test (unit) | `npm run test` |
|
||||||
|
| Test (watch) | `npm run test:watch` |
|
||||||
|
| Build CSS | `npm run build` |
|
||||||
|
| Release | `npm run release` |
|
||||||
|
| E2E test | `npm test` in `tests/e2e/` |
|
||||||
|
|
||||||
|
**Watch is broken** — `npm run watch` outputs to `dist/styles/` (gitignored) instead of `styles/`. Use `npm run build` manually.
|
||||||
|
|
||||||
|
Version source of truth: `package.json`; `scripts/package.mjs` copies it to `module.json` at release.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
- **`module.js`** — wiring diagram ONLY. Imports, constructs with DI, registers hooks. Zero business logic. Never add logic here.
|
||||||
|
- **`src/contracts/`** — data contracts/DTOs. Must not import from any other `src/` module.
|
||||||
|
- **`src/utils/`** — utilities. Must not import from any other `src/` module.
|
||||||
|
- **`src/core/`** — business logic. May import from `contracts/` and `utils/` only.
|
||||||
|
- **`src/foundry/`** — `FoundryAdapter.js` is the sole gateway to `game.*` APIs. Same import restriction as `core/`.
|
||||||
|
- **`src/core/` ↔ `src/foundry/`** — never cross-import. Enforced by ESLint `import/no-restricted-paths`.
|
||||||
|
- **Constructor side-effect-free** — no hooks/socket registration in constructors; call `init()` from `Hooks.once('ready')` in `module.js`.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- **Vitest** with `happy-dom`, `globals: false` — always import `describe`, `it`, `expect`, `vi` explicitly.
|
||||||
|
- **Path aliases** (vitest only): `@src`, `@contracts`, `@utils`, `@tests`.
|
||||||
|
- **Mock factory** — always use `createFoundryAdapterMock()` from `tests/helpers/foundryAdapterMock.js`. No ad-hoc stubs.
|
||||||
|
- **Hooks** is stubbed globally via `vi.stubGlobal('Hooks', ...)` in each test's `beforeEach`.
|
||||||
|
- **E2E tests** live in `tests/e2e/` with separate `package.json`. Need live FoundryVTT at `https://localhost:31000` (user: `gamemaster`). Not run in CI.
|
||||||
|
- **`@ts-nocheck`** is used at top of many test files — this is normal for this repo.
|
||||||
|
|
||||||
|
## FoundryVTT specifics
|
||||||
|
|
||||||
|
- Globals injected at runtime: `Hooks`, `game`, `ui`, `canvas`, `foundry`, `CONFIG`, `CONST` — listed as ESLint `readonly` globals.
|
||||||
|
- Type checking (`tsc --noEmit`) only covers `module.js`. Source files are NOT typechecked.
|
||||||
|
- Type defs from `@league-of-foundry-developers/foundry-vtt-types` (9.x) + local `src/types/foundry-globals.d.ts`.
|
||||||
|
- CSS scoped under `.scrying-pool`, token vars prefixed `--sp-*`, compiled from LESS via `npm run build`.
|
||||||
|
|
||||||
|
## CI & releases
|
||||||
|
|
||||||
|
- **Gitea** (not GitHub) at `uberwald.me/gitea/`. CI uses `RouxAntoine/checkout@v3.5.4`.
|
||||||
|
- CI: `npm ci` → `npm audit --production` → `npm run lint` → `npm run typecheck` → `npm run test` → `npm run build`.
|
||||||
|
- Release: triggered on tag publish, substitutes `module.json` URLs, creates `module.zip`, uploads via curl + Gitea API token.
|
||||||
|
|
||||||
|
## Design docs
|
||||||
|
|
||||||
|
Full project history in `_bmad-output/` — PRDs, architecture specs, epics, deferred work tracking. For deep context start with `_bmad-output/planning-artifacts/architecture.md` and `_bmad-output/planning-artifacts/epics.md`.
|
||||||
@@ -0,0 +1,439 @@
|
|||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||||
|
does not provide legal services or legal advice. Distribution of
|
||||||
|
Creative Commons public licenses does not create a lawyer-client or
|
||||||
|
other relationship. Creative Commons makes its licenses and related
|
||||||
|
information available on an "as-is" basis. Creative Commons gives no
|
||||||
|
warranties regarding its licenses, any material licensed under their
|
||||||
|
terms and conditions, or any related information. Creative Commons
|
||||||
|
disclaims all liability for damages resulting from their use to the
|
||||||
|
fullest extent possible.
|
||||||
|
|
||||||
|
Using Creative Commons Public Licenses
|
||||||
|
|
||||||
|
Creative Commons public licenses provide a standard set of terms and
|
||||||
|
conditions that creators and other rights holders may use to share
|
||||||
|
original works of authorship and other material subject to copyright
|
||||||
|
and certain other rights specified in the public license below. The
|
||||||
|
following considerations are for informational purposes only, are not
|
||||||
|
exhaustive, and do not form part of our licenses.
|
||||||
|
|
||||||
|
Considerations for licensors: Our public licenses are
|
||||||
|
intended for use by those authorized to give the public
|
||||||
|
permission to use material in ways otherwise restricted by
|
||||||
|
copyright and certain other rights. Our licenses are
|
||||||
|
irrevocable. Licensors should read and understand the terms
|
||||||
|
and conditions of the license they choose before applying it.
|
||||||
|
Licensors should also secure all rights necessary before
|
||||||
|
applying our licenses so that the public can reuse the
|
||||||
|
material as expected. Licensors should clearly mark any
|
||||||
|
material not subject to the license. This includes other CC-
|
||||||
|
licensed material, or material used under an exception or
|
||||||
|
limitation to copyright. More considerations for licensors:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensors
|
||||||
|
|
||||||
|
Considerations for the public: By using one of our public
|
||||||
|
licenses, a licensor grants the public permission to use the
|
||||||
|
licensed material under specified terms and conditions. If
|
||||||
|
the licensor's permission is not necessary for any reason--for
|
||||||
|
example, because of any applicable exception or limitation to
|
||||||
|
copyright--then that use is not regulated by the license. Our
|
||||||
|
licenses grant only permissions under copyright and certain
|
||||||
|
other rights that a licensor has authority to grant. Use of
|
||||||
|
the licensed material may still be restricted for other
|
||||||
|
reasons, including because others have copyright or other
|
||||||
|
rights in the material. A licensor may make special requests,
|
||||||
|
such as asking that all changes be marked or described.
|
||||||
|
Although not required by our licenses, you are encouraged to
|
||||||
|
refer to those standards and best practices.
|
||||||
|
More considerations for the public:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensees
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
Public License
|
||||||
|
|
||||||
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
|
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||||
|
("Public License"). To the extent this Public License may be
|
||||||
|
interpreted as a contract, You are granted the Licensed Rights in
|
||||||
|
consideration of Your acceptance of these terms and conditions, and the
|
||||||
|
Licensor grants You such rights in consideration of benefits the
|
||||||
|
Licensor receives from making the Licensed Material available under
|
||||||
|
these terms and conditions.
|
||||||
|
|
||||||
|
|
||||||
|
Section 1 -- Definitions.
|
||||||
|
|
||||||
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
|
Rights that is derived from or based upon the Licensed Material
|
||||||
|
and in which the Licensed Material is translated, altered,
|
||||||
|
arranged, transformed, or otherwise modified in a manner requiring
|
||||||
|
permission under the Copyright and Similar Rights held by the
|
||||||
|
Licensor. For purposes of this Public License, where the Licensed
|
||||||
|
Material is a musical work, performance, or sound recording,
|
||||||
|
Adapted Material is always produced where the Licensed Material is
|
||||||
|
synched in timed relation with a moving image.
|
||||||
|
|
||||||
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
|
accordance with the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
c. BY-NC-SA Compatible License means a license listed at
|
||||||
|
creativecommons.org/compatiblelicenses, approved by Creative
|
||||||
|
Commons as essentially the equivalent of this Public License.
|
||||||
|
|
||||||
|
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
|
closely related to copyright including, without limitation,
|
||||||
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
|
||||||
|
e. Effective Technological Measures means those measures that, in the
|
||||||
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
|
||||||
|
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
|
that applies to Your use of the Licensed Material.
|
||||||
|
|
||||||
|
g. License Elements means the license attributes listed in the name
|
||||||
|
of a Creative Commons Public License. The License Elements of this
|
||||||
|
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||||
|
|
||||||
|
h. Licensed Material means the artistic or literary work, database,
|
||||||
|
or other material to which the Licensor applied this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
i. Licensed Rights means the rights granted to You subject to the
|
||||||
|
terms and conditions of this Public License, which are limited to
|
||||||
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
|
Licensed Material and that the Licensor has authority to license.
|
||||||
|
|
||||||
|
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
|
under this Public License.
|
||||||
|
|
||||||
|
k. NonCommercial means not primarily intended for or directed towards
|
||||||
|
commercial advantage or monetary compensation. For purposes of
|
||||||
|
this Public License, the exchange of the Licensed Material for
|
||||||
|
other material subject to Copyright and Similar Rights by digital
|
||||||
|
file-sharing or similar means is NonCommercial provided there is
|
||||||
|
no payment of monetary compensation in connection with the
|
||||||
|
exchange.
|
||||||
|
|
||||||
|
l. Share means to provide material to the public by any means or
|
||||||
|
process that requires permission under the Licensed Rights, such
|
||||||
|
as reproduction, public display, public performance, distribution,
|
||||||
|
dissemination, communication, or importation, and to make material
|
||||||
|
available to the public including in ways that members of the
|
||||||
|
public may access the material from a place and at a time
|
||||||
|
individually chosen by them.
|
||||||
|
|
||||||
|
m. Sui Generis Database Rights means rights other than copyright
|
||||||
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
|
as amended and/or succeeded, as well as other essentially
|
||||||
|
equivalent rights anywhere in the world.
|
||||||
|
|
||||||
|
n. You means the individual or entity exercising the Licensed Rights
|
||||||
|
under this Public License. Your has a corresponding meaning.
|
||||||
|
|
||||||
|
|
||||||
|
Section 2 -- Scope.
|
||||||
|
|
||||||
|
a. License grant.
|
||||||
|
|
||||||
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
|
||||||
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
|
in part, for NonCommercial purposes only; and
|
||||||
|
|
||||||
|
b. produce, reproduce, and Share Adapted Material for
|
||||||
|
NonCommercial purposes only.
|
||||||
|
|
||||||
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
|
License does not apply, and You do not need to comply with
|
||||||
|
its terms and conditions.
|
||||||
|
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
6(a).
|
||||||
|
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in
|
||||||
|
all media and formats whether now known or hereafter created,
|
||||||
|
and to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including
|
||||||
|
technical modifications necessary to circumvent Effective
|
||||||
|
Technological Measures. For purposes of this Public License,
|
||||||
|
simply making modifications authorized by this Section 2(a)
|
||||||
|
(4) never produces Adapted Material.
|
||||||
|
|
||||||
|
5. Downstream recipients.
|
||||||
|
|
||||||
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically
|
||||||
|
receives an offer from the Licensor to exercise the
|
||||||
|
Licensed Rights under the terms and conditions of this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
b. Additional offer from the Licensor -- Adapted Material.
|
||||||
|
Every recipient of Adapted Material from You
|
||||||
|
automatically receives an offer from the Licensor to
|
||||||
|
exercise the Licensed Rights in the Adapted Material
|
||||||
|
under the conditions of the Adapter's License You apply.
|
||||||
|
|
||||||
|
c. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient.
|
||||||
|
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section 3(a)(1)(A)(i).
|
||||||
|
|
||||||
|
b. Other rights.
|
||||||
|
|
||||||
|
1. Moral rights, such as the right of integrity, are not
|
||||||
|
licensed under this Public License, nor are publicity,
|
||||||
|
privacy, and/or other similar personality rights; however, to
|
||||||
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
|
assert any such rights held by the Licensor to the limited
|
||||||
|
extent necessary to allow You to exercise the Licensed
|
||||||
|
Rights, but not otherwise.
|
||||||
|
|
||||||
|
2. Patent and trademark rights are not licensed under this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society
|
||||||
|
under any voluntary or waivable statutory or compulsory
|
||||||
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
|
reserves any right to collect such royalties, including when
|
||||||
|
the Licensed Material is used other than for NonCommercial
|
||||||
|
purposes.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3 -- License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
|
||||||
|
a. Attribution.
|
||||||
|
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
|
||||||
|
a. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if
|
||||||
|
designated);
|
||||||
|
|
||||||
|
ii. a copyright notice;
|
||||||
|
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
|
||||||
|
b. indicate if You modified the Licensed Material and
|
||||||
|
retain an indication of any previous modifications; and
|
||||||
|
|
||||||
|
c. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
|
||||||
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section 3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
|
||||||
|
b. ShareAlike.
|
||||||
|
|
||||||
|
In addition to the conditions in Section 3(a), if You Share
|
||||||
|
Adapted Material You produce, the following conditions also apply.
|
||||||
|
|
||||||
|
1. The Adapter's License You apply must be a Creative Commons
|
||||||
|
license with the same License Elements, this version or
|
||||||
|
later, or a BY-NC-SA Compatible License.
|
||||||
|
|
||||||
|
2. You must include the text of, or the URI or hyperlink to, the
|
||||||
|
Adapter's License You apply. You may satisfy this condition
|
||||||
|
in any reasonable manner based on the medium, means, and
|
||||||
|
context in which You Share Adapted Material.
|
||||||
|
|
||||||
|
3. You may not offer or impose any additional or different terms
|
||||||
|
or conditions on, or apply any Effective Technological
|
||||||
|
Measures to, Adapted Material that restrict exercise of the
|
||||||
|
rights granted under the Adapter's License You apply.
|
||||||
|
|
||||||
|
|
||||||
|
Section 4 -- Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
|
||||||
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database for NonCommercial purposes
|
||||||
|
only;
|
||||||
|
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material,
|
||||||
|
including for purposes of Section 3(b); and
|
||||||
|
|
||||||
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
|
all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
|
||||||
|
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
|
||||||
|
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||||
|
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||||
|
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||||
|
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||||
|
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||||
|
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||||
|
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||||
|
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||||
|
FULLY ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY
|
||||||
|
TO YOU.
|
||||||
|
|
||||||
|
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||||
|
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||||
|
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||||
|
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||||
|
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||||
|
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||||
|
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT FULLY ALLOWED IN
|
||||||
|
FULL OR IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
|
||||||
|
Section 6 -- Term and Termination.
|
||||||
|
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section 6(a), it reinstates:
|
||||||
|
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the
|
||||||
|
violation; or
|
||||||
|
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||||
|
right the Licensor may have to seek remedies for Your violations
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
|
||||||
|
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 7 -- Other Terms and Conditions.
|
||||||
|
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 8 -- Interpretation.
|
||||||
|
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and
|
||||||
|
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted
|
||||||
|
as limitation upon, or waiver of, any privileges and immunities
|
||||||
|
that apply to the Licensor or You, including from the legal
|
||||||
|
processes of any jurisdiction or authority.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons is not a party to its public
|
||||||
|
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||||
|
its public licenses to material it publishes and in those instances
|
||||||
|
will be considered the "Licensor." The text of the Creative Commons
|
||||||
|
public licenses is dedicated to the public domain under the CC0 Public
|
||||||
|
Domain Dedication. Except for the limited purpose of indicating that
|
||||||
|
material is shared under a Creative Commons public license or as
|
||||||
|
otherwise permitted by the Creative Commons policies published at
|
||||||
|
creativecommons.org/policies, Creative Commons does not authorize the
|
||||||
|
use of the trademark "Creative Commons" or any other trademark or logo
|
||||||
|
of Creative Commons without its prior written consent including,
|
||||||
|
without limitation, in connection with any unauthorized modifications
|
||||||
|
to any of its public licenses or any other arrangements,
|
||||||
|
understandings, or agreements concerning use of licensed material.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this paragraph does not form part of the
|
||||||
|
public licenses.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
@@ -0,0 +1,195 @@
|
|||||||
|
<p align="center">
|
||||||
|
<img src="https://raw.githubusercontent.com/morr/scrying-pool/main/.github/logo.png" alt="Scrying Pool" width="128" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h1 align="center">Scrying Pool</h1>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<em>GM camera visibility control for FoundryVTT v14+</em>
|
||||||
|
<br />
|
||||||
|
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-lightgrey" alt="License: CC BY-NC-SA 4.0" /></a>
|
||||||
|
<br />
|
||||||
|
<sub>Français · <a href="#english">English</a></sub>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Français
|
||||||
|
|
||||||
|
**Scrying Pool** est un module FoundryVTT qui donne au MJ un contrôle total sur la visibilité des caméras des participants. Fini les flux vidéo désordonnés — gérez qui voit quoi depuis une interface flottante et discrète.
|
||||||
|
|
||||||
|
### Fonctionnalités
|
||||||
|
|
||||||
|
| Fonction | Description |
|
||||||
|
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| **Barre du MJ** | Palette flottante listant tous les participants connectés, avec leur état caméra en temps réel |
|
||||||
|
| **Director's Board** | Fenêtre de pilotage complète : grille de participants, actions groupées, mise en avant |
|
||||||
|
| **Masquer / Afficher** | Cache ou révèle un flux à la table — par clic droit ou popover |
|
||||||
|
| **Actions groupées** | Tout afficher, tout masquer, annuler la dernière action en un clic |
|
||||||
|
| **Mise en avant (Spotlight)** | `Shift+clic` sur un participant → sa vidéo s'agrandit (×2), les autres disparaissent. `Échap` pour quitter |
|
||||||
|
| **Réorganisation** | Faites glisser les participants dans la barre pour les réorganiser. Double-clic sur la poignée pour réinitialiser |
|
||||||
|
| **Mosaïque / Grille** | 6 dispositions : vertical/horizontal/mosaïque, chacune en taille S ou L |
|
||||||
|
| **Formes des tuiles** | Rond, arrondi, hexagone, octogone — appliqué aux avatars et aux vidéos |
|
||||||
|
| **Bordures** | Largeur et couleur paramétrables pour les tuiles vidéo |
|
||||||
|
| **Préréglages** | Sauvegardez et chargez des dispositions de visibilité, avec application automatique par scène |
|
||||||
|
| **Portrait personnalisé** | Les joueurs peuvent choisir une image de remplacement quand leur caméra est indisponible |
|
||||||
|
| **Confidentialité** | Panneau de consentement pour les automatismes (caméra de réaction, etc.) |
|
||||||
|
| **Notifications** | Notifications configurables (toutes, MJ seulement, silencieux) |
|
||||||
|
| **Rétablissement position** | La position de la barre est sauvegardée automatiquement toutes les 30s et au relâché du glisser |
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
1. Dans FoundryVTT, allez dans la **Modules**
|
||||||
|
2. Recherchez **Scrying Pool**
|
||||||
|
3. Cliquez **Installer**
|
||||||
|
|
||||||
|
### Utilisation
|
||||||
|
|
||||||
|
#### Barre du MJ (strip)
|
||||||
|
|
||||||
|
La barre flottante apparaît automatiquement quand vous vous connectez en tant que MJ. Elle liste tous les participants avec leur état :
|
||||||
|
|
||||||
|
- **Clic** → popover pour masquer/afficher ce participant
|
||||||
|
- **Clic droit** → menu contextuel (masquer/afficher)
|
||||||
|
- **Shift+clic** → mode Spotlight (vidéo ×2)
|
||||||
|
- **Glisser** la poignée ⟞ pour déplacer la barre
|
||||||
|
- **Glisser** un participant pour le réorganiser
|
||||||
|
- **Double-clic** sur la poignée → réinitialiser l'ordre des participants
|
||||||
|
- **Bouton `[+]`** → basculer taille S/L
|
||||||
|
- **Bouton `[⊞]`** → ouvrir le Director's Board
|
||||||
|
|
||||||
|
La barre se fondu dans le décor — pas de chrome visible tant que vous ne la survolez pas.
|
||||||
|
|
||||||
|
#### Director's Board
|
||||||
|
|
||||||
|
Ouvrable depuis la barre (bouton `[⊞]`) ou via `Ctrl+Shift+V`.
|
||||||
|
|
||||||
|
- Grille de tous les participants avec statut et indicateur d'opération en attente
|
||||||
|
- Boutons **Tout afficher** / **Tout masquer**
|
||||||
|
- **Undo** (apparaît après une action groupée)
|
||||||
|
- **Rétablir** (après une mise en avant Spotlight)
|
||||||
|
- Sélecteur de **disposition** (vertical/horizontal/mosaïque, S/L)
|
||||||
|
- Sélecteur de **forme** des tuiles (cercle, arrondi, hexagone, octogone)
|
||||||
|
- Contrôles de **bordure** (largeur, couleur)
|
||||||
|
- Réglages de **taille des widgets** (petite 60–200px, grande 60–400px)
|
||||||
|
- Sauvegarde/chargement/export/import de **préréglages**
|
||||||
|
- **Application automatique** par scène
|
||||||
|
- Activation/désactivation A/V
|
||||||
|
- **Bouton Réinitialiser la barre** (rétablit la position par défaut)
|
||||||
|
|
||||||
|
#### Raccourcis clavier
|
||||||
|
|
||||||
|
| Raccourci | Action |
|
||||||
|
| -------------- | ------------------------------------------ |
|
||||||
|
| `Ctrl+Shift+V` | Ouvrir/Fermer le Director's Board |
|
||||||
|
| `Ctrl+Shift+S` | Tout afficher |
|
||||||
|
| `Ctrl+Shift+H` | Tout masquer |
|
||||||
|
| `Ctrl+Shift+P` | Mettre en avant le participant sélectionné |
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Module accessible depuis **Paramètres → Gérer les modules → Scrying Pool**.
|
||||||
|
|
||||||
|
| Option | Description |
|
||||||
|
| --------------------------- | ---------------------------------------------------------------------- |
|
||||||
|
| Afficher le flux du MJ | Quand activé, la propre caméra du MJ est visible dans la barre |
|
||||||
|
| Verbosité des notifications | Toutes / MJ seulement / Silencieux |
|
||||||
|
| Application automatique | Activer/désactiver globalement l'application des préréglages par scène |
|
||||||
|
|
||||||
|
### Support
|
||||||
|
|
||||||
|
Pour signaler un bug ou proposer une amélioration : [ouvrir un ticket](https://github.com/morr/scrying-pool/issues).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## English
|
||||||
|
|
||||||
|
**Scrying Pool** is a FoundryVTT module that gives GMs full control over participant camera visibility. No more messy video feeds — manage who sees what from a discreet floating interface.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
| Feature | Description |
|
||||||
|
| --------------------- | ---------------------------------------------------------------------------------------- |
|
||||||
|
| **GM Strip** | Floating palette listing all connected participants with real-time camera state |
|
||||||
|
| **Director's Board** | Full command window: participant grid, bulk actions, spotlight |
|
||||||
|
| **Hide / Show** | Hide or reveal a feed to the table — via right-click or popover |
|
||||||
|
| **Bulk actions** | Show all, hide all, undo last bulk action in one click |
|
||||||
|
| **Spotlight** | `Shift+click` a participant → their video enlarges (×2), others disappear. `Esc` to exit |
|
||||||
|
| **Re-order** | Drag participants in the strip to rearrange them. Double-click the grip to reset |
|
||||||
|
| **Mosaic / Grid** | 6 layouts: vertical/horizontal/mosaic, each in S or L size |
|
||||||
|
| **Tile shapes** | Circle, rounded, hexagon, octagon — applied to avatars and video feeds |
|
||||||
|
| **Borders** | Configurable width and color for video tiles |
|
||||||
|
| **Presets** | Save and load visibility layouts, with per-scene auto-apply |
|
||||||
|
| **Custom portrait** | Players can set a fallback image when their camera is unavailable |
|
||||||
|
| **Privacy** | Consent panel for automation features (reaction cam, etc.) |
|
||||||
|
| **Notifications** | Configurable notification verbosity (all, GM only, silent) |
|
||||||
|
| **Position recovery** | Strip position auto-saved every 30s and on drag release |
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
1. In FoundryVTT, go to the **Modules**
|
||||||
|
2. Search for **Scrying Pool**
|
||||||
|
3. Click **Install**
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
#### GM Strip
|
||||||
|
|
||||||
|
The floating strip appears automatically when you log in as GM. It lists all participants with their state:
|
||||||
|
|
||||||
|
- **Click** → popover to hide/show that participant
|
||||||
|
- **Right-click** → context menu (hide/show)
|
||||||
|
- **Shift+click** → Spotlight mode (×2 video)
|
||||||
|
- **Drag** the ⟞ handle to move the strip
|
||||||
|
- **Drag** a participant to reorder them
|
||||||
|
- **Double-click** the handle → reset participant order
|
||||||
|
- **`[+]` button** → toggle S/L size
|
||||||
|
- **`[⊞]` button** → open the Director's Board
|
||||||
|
|
||||||
|
The strip is stealthy — no chrome visible until hover.
|
||||||
|
|
||||||
|
#### Director's Board
|
||||||
|
|
||||||
|
Open from the strip (`[⊞]` button) or via `Ctrl+Shift+V`.
|
||||||
|
|
||||||
|
- Grid of all participants with status and pending-operation indicator
|
||||||
|
- **Show All** / **Hide All** buttons
|
||||||
|
- **Undo** (appears after a bulk action)
|
||||||
|
- **Restore** (after a Spotlight)
|
||||||
|
- **Layout** selector (vertical/horizontal/mosaic, S/L)
|
||||||
|
- **Shape** selector (circle, rounded, hexagon, octagon)
|
||||||
|
- **Border** controls (width, color)
|
||||||
|
- **Widget size** settings (small 60–200px, large 60–400px)
|
||||||
|
- **Preset** save/load/export/import
|
||||||
|
- Per-scene **auto-apply**
|
||||||
|
- A/V toggle
|
||||||
|
- **Reset Strip** button (restores default position)
|
||||||
|
|
||||||
|
#### Keyboard Shortcuts
|
||||||
|
|
||||||
|
| Shortcut | Action |
|
||||||
|
| -------------- | ----------------------------- |
|
||||||
|
| `Ctrl+Shift+V` | Open/Close Director's Board |
|
||||||
|
| `Ctrl+Shift+S` | Show All |
|
||||||
|
| `Ctrl+Shift+H` | Hide All |
|
||||||
|
| `Ctrl+Shift+P` | Spotlight focused participant |
|
||||||
|
|
||||||
|
### Settings
|
||||||
|
|
||||||
|
Access from **Settings → Manage Modules → Scrying Pool**.
|
||||||
|
|
||||||
|
| Option | Description |
|
||||||
|
| ---------------------- | ------------------------------------------------------------ |
|
||||||
|
| Show GM Self Feed | When enabled, the GM's own camera feed is shown in the strip |
|
||||||
|
| Notification Verbosity | All / GM Only / Silent |
|
||||||
|
| Auto-Apply | Globally enable/disable per-scene preset auto-apply |
|
||||||
|
|
||||||
|
### Support
|
||||||
|
|
||||||
|
Report bugs or request features: [open an issue](https://github.com/morr/scrying-pool/issues).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<sub>Made for FoundryVTT v14+ · <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a></sub>
|
||||||
|
</p>
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
---
|
||||||
|
title: 'Strip: Reorder, Spotlight & Auto-Snapshots'
|
||||||
|
type: 'feature'
|
||||||
|
created: '2026-05-27'
|
||||||
|
status: 'done'
|
||||||
|
baseline_commit: '816b7951fb88353b43c66e7b9f898701ea65ad2b'
|
||||||
|
context: []
|
||||||
|
---
|
||||||
|
|
||||||
|
<frozen-after-approval reason="human-owned intent — do not modify unless human renegotiates">
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
**Problem:** Strip participants have a fixed order, no way to focus a single participant, and position is only saved on close.
|
||||||
|
|
||||||
|
**Approach:** Add HTML5 drag-and-drop reordering (per-GM flag), Shift+click spotlight (in-memory, one-tile focus mode), and periodic auto-save of strip position (debounced + 30s interval with viewport validation).
|
||||||
|
|
||||||
|
## Boundaries & Constraints
|
||||||
|
|
||||||
|
**Always:**
|
||||||
|
- Re-order: persists to `game.user.setFlag('scrying-pool', 'participantOrder', string[])`, per-GM only
|
||||||
|
- Spotlight: in-memory `_focusedUserId` only, no socket/persistence
|
||||||
|
- Auto-snapshots: extends existing `stripState` flag (`left, top, width, height, savedAt`), backward-compatible
|
||||||
|
- All three features are strip-only (not Director's Board)
|
||||||
|
- French locale strings in `scrying-pool.lang.fr.json`
|
||||||
|
|
||||||
|
**Ask First:** None
|
||||||
|
|
||||||
|
**Never:**
|
||||||
|
- No external drag-and-drop libraries
|
||||||
|
- No socket broadcasts for re-order or spotlight
|
||||||
|
- No CSS animation framework changes
|
||||||
|
|
||||||
|
## I/O & Edge-Case Matrix
|
||||||
|
|
||||||
|
| Scenario | Input / State | Expected Output / Behavior | Error Handling |
|
||||||
|
|----------|--------------|---------------------------|----------------|
|
||||||
|
| Re-order: drag participant | Drag start on tile | Tile shows `opacity: 0.3` during drag | N/A |
|
||||||
|
| Re-order: drop between tiles | Drop at new position | Participant order updates, flag saved, strip re-renders | Save failure silently caught |
|
||||||
|
| Re-order: double-click grip | Double-click grip area | Order resets to connection order | N/A |
|
||||||
|
| Spotlight: Shift+click | Shift+click participant | Only that participant visible, others `display:none` in DOM, strip resized | N/A |
|
||||||
|
| Spotlight: exit via Escape | Press Escape | Full list restored, `_focusedUserId` cleared | N/A |
|
||||||
|
| Spotlight: exit via button | Click exit-focus button (replaces DB icon) | Same as Escape | N/A |
|
||||||
|
| Auto-snapshot: drag ends | mouseup after drag | Debounced save to `stripState` flag | Save failure silently caught |
|
||||||
|
| Auto-snapshot: 30s timer | Interval fires | Save current position to `stripState` | Save failure silently caught |
|
||||||
|
| Auto-snapshot: position off-screen | Saved position outside viewport | Fall back to default position | Silent fallback, no error |
|
||||||
|
|
||||||
|
</frozen-after-approval>
|
||||||
|
|
||||||
|
## Code Map
|
||||||
|
|
||||||
|
- `src/ui/gm/ScryingPoolStrip.js` — All three features: drag handlers, spotlight state, auto-save timer
|
||||||
|
- `styles/components/_roster-strip.less` — Drag feedback (`opacity: 0.3`), spotlight visual state
|
||||||
|
- `templates/directors-board.hbs` — Reset strip position button
|
||||||
|
- `src/ui/gm/DirectorsBoard.js` — Reset position handler
|
||||||
|
- `module.js` — (no changes needed, instantiates the class)
|
||||||
|
- `scrying-pool.lang.fr.json` — French locale strings
|
||||||
|
|
||||||
|
## Tasks & Acceptance
|
||||||
|
|
||||||
|
**Execution:**
|
||||||
|
- [x] `src/ui/gm/ScryingPoolStrip.js` — Add `_focusedUserId`, drag handlers, _savePosition, re-order in _prepareContext
|
||||||
|
- [x] `styles/components/_roster-strip.less` — `.sp-state-focused` gold ring, drag ghost opacity
|
||||||
|
- [x] `templates/directors-board.hbs` — Reset strip position button
|
||||||
|
- [x] `src/ui/gm/DirectorsBoard.js` — `_onResetStripPosition()` handler
|
||||||
|
|
||||||
|
**Acceptance Criteria:**
|
||||||
|
- Given a strip with 3+ participants, when GM drags a participant tile to a new position, then the participant order updates and persists across re-renders
|
||||||
|
- Given any layout, when GM Shift+clicks a participant, then other participants collapse and the focused tile shows gold state ring
|
||||||
|
- Given spotlight mode is active, when GM presses Escape, then all participants return to normal
|
||||||
|
- Given the strip is open, when GM drags the strip to a new position and releases, then the position is saved
|
||||||
|
- Given a saved off-screen position, when the strip re-renders, then it appears at default coordinates
|
||||||
|
|
||||||
|
## Suggested Review Order
|
||||||
|
|
||||||
|
**Re-order + Spotlight core logic**
|
||||||
|
|
||||||
|
- Entry point: participant filtering, DnD handlers, focus toggle, position save
|
||||||
|
[`ScryingPoolStrip.js:149`](../../src/ui/gm/ScryingPoolStrip.js#L149)
|
||||||
|
|
||||||
|
- Drag-drop splice with `fromIdx < toIdx` adjustment + null guard on element
|
||||||
|
[`ScryingPoolStrip.js:1013`](../../src/ui/gm/ScryingPoolStrip.js#L1013)
|
||||||
|
|
||||||
|
- Focus toggle toggles `_focusedUserId`, re-renders; Escape exits via document listener
|
||||||
|
[`ScryingPoolStrip.js:1076`](../../src/ui/gm/ScryingPoolStrip.js#L1076)
|
||||||
|
|
||||||
|
- Auto-save: called on grip mouseup + 30s interval; cleanup on teardown
|
||||||
|
[`ScryingPoolStrip.js:1094`](../../src/ui/gm/ScryingPoolStrip.js#L1094)
|
||||||
|
|
||||||
|
- Viewport-validated position restore with negative-value guard
|
||||||
|
[`ScryingPoolStrip.js:178`](../../src/ui/gm/ScryingPoolStrip.js#L178)
|
||||||
|
|
||||||
|
**Template changes**
|
||||||
|
|
||||||
|
- `isFocused` conditional class for gold ring on focused participant
|
||||||
|
[`roster-strip.hbs:54`](../../templates/roster-strip.hbs#L54)
|
||||||
|
|
||||||
|
- Reset strip position button in Director's Board footer
|
||||||
|
[`directors-board.hbs:140`](../../templates/directors-board.hbs#L140)
|
||||||
|
|
||||||
|
**CSS**
|
||||||
|
|
||||||
|
- Gold state ring for `.sp-state-focused`, drag ghost opacity, drop target indicator
|
||||||
|
[`_roster-strip.less:517`](../../styles/components/_roster-strip.less#L517)
|
||||||
|
|
||||||
|
**Director's Board**
|
||||||
|
|
||||||
|
- Reset position handler clears stripState flag
|
||||||
|
[`DirectorsBoard.js:861`](../../src/ui/gm/DirectorsBoard.js#L861)
|
||||||
|
|
||||||
|
**Locales**
|
||||||
|
|
||||||
|
- Reset strip button strings (EN + FR)
|
||||||
|
[`en.json:82`](../../lang/en.json#L82) · [`fr.json:82`](../../lang/fr.json#L82)
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
**Commands:**
|
||||||
|
- `npm run lint` -- expected: 0 errors
|
||||||
|
- `npm run typecheck` -- expected: 0 errors
|
||||||
|
- `npm run test` -- expected: all tests pass
|
||||||
@@ -12,7 +12,12 @@ inputDocuments:
|
|||||||
workflowType: 'architecture'
|
workflowType: 'architecture'
|
||||||
project_name: 'video-view-manager'
|
project_name: 'video-view-manager'
|
||||||
user_name: 'Morr'
|
user_name: 'Morr'
|
||||||
date: '2026-05-20'
|
date: '2026-05-27'
|
||||||
|
extendedAt: '2026-05-27'
|
||||||
|
extendedFeatures:
|
||||||
|
- reorder-participants
|
||||||
|
- spotlight-focus
|
||||||
|
- auto-position-snapshots
|
||||||
---
|
---
|
||||||
|
|
||||||
# Architecture Decision Document: Video View Manager (Scrying Pool)
|
# Architecture Decision Document: Video View Manager (Scrying Pool)
|
||||||
@@ -1091,3 +1096,82 @@ both critical gaps found during validation were resolved inline without reopenin
|
|||||||
Story 0 scaffold — `module.json` + `tsconfig.json` + `vitest.config.js` + `.eslintrc.js` +
|
Story 0 scaffold — `module.json` + `tsconfig.json` + `vitest.config.js` + `.eslintrc.js` +
|
||||||
`scripts/package.mjs` + `src/contracts/` (with validators + frozen fixtures) +
|
`scripts/package.mjs` + `src/contracts/` (with validators + frozen fixtures) +
|
||||||
`.gitea/workflows/ci.yml` — all Story 0 ACs green before any Story 1 code.
|
`.gitea/workflows/ci.yml` — all Story 0 ACs green before any Story 1 code.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feature Addendum (2026-05-27): Re-order Participants
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
Strip participant order is fixed to user connection order. GM cannot rearrange participants to match table seating, spotlight priority, or personal preference.
|
||||||
|
|
||||||
|
### Decision: Drag-and-drop via native HTML5 API
|
||||||
|
|
||||||
|
| Decision | Choice | Rationale |
|
||||||
|
|---|---|---|
|
||||||
|
| Mechanism | HTML5 Drag & Drop (`draggable`, `dragstart`/`dragover`/`drop` events) | Zero dependencies; works in Foundry's embedded Chromium; no external lib needed |
|
||||||
|
| Persistence | User flag: `game.user.setFlag('scrying-pool', 'participantOrder', string[])` | Per-GM order; does not affect other GMs or players |
|
||||||
|
| Storage format | Ordered array of user IDs | Minimal, sortable, forward-compatible |
|
||||||
|
| Visual feedback | `opacity: 0.3` on dragged tile + `box-shadow` drop indicator on target gap | Lightweight; no layout shift |
|
||||||
|
| Reset | Double-click the grip area → reset to connection order | Escape hatch if order gets confusing |
|
||||||
|
| Scope | Strip only (not Director's Board) | Strip is the primary real-estate; DB reorder adds complexity with no clear need |
|
||||||
|
|
||||||
|
### Implementation Notes
|
||||||
|
- `ScryingPoolStrip` gets `_onDragStart`, `_onDragOver`, `_onDrop`, `_onDragEnd` handlers
|
||||||
|
- Attached in `_onRender` via `el.addEventListener`
|
||||||
|
- On drop: reorder participant list in `_prepareContext`, persist to user flag
|
||||||
|
- `_prepareContext` reads flag, applies order before filtering hidden participants
|
||||||
|
- No socket broadcast — order is per-GM/local-only
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feature Addendum (2026-05-27): Spotlight / Focus
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
In all layouts, participants share equal visual weight. GM cannot temporarily focus on one participant's video feed (e.g., a player speaking, a dramatic reveal).
|
||||||
|
|
||||||
|
### Decision: One-tile-expand mode within the strip
|
||||||
|
|
||||||
|
| Decision | Choice | Rationale |
|
||||||
|
|---|---|---|
|
||||||
|
| Activation | Click on participant avatar while holding `Shift` (or context menu → "Focus") | Intentional action; avoids accidental triggers |
|
||||||
|
| Visual | Selected tile expands to fill strip content area; other tiles collapse to `height: 0; overflow: hidden` (preserved in DOM for instant restore) | No layout reflow on restore; preserved DOM state |
|
||||||
|
| Restore | Click `Shift+click` again, or click an "Exit focus" button that replaces the toolbar, or press `Escape` | Multiple escape hatches |
|
||||||
|
| State | In-memory only: `_focusedUserId: string|null` on `ScryingPoolStrip` | Ephemeral — no persistence needed |
|
||||||
|
| Indicator | Focused tile gets `.sp-state-focused` class → gold state ring (`--sp-urgency-director`) | Visual consistency with existing state ring system |
|
||||||
|
| Strip sizing | `setPosition` recomputed with `1` participant during focus | Window snaps to single-tile dimensions |
|
||||||
|
| Layout compatibility | Works in all layouts (vertical, horizontal, mosaic) | Tile fills available space via same CSS that handles single-participant edge case |
|
||||||
|
| Director's Board | Unaffected — spotlight is strip-only | DB maintains overview while strip focuses |
|
||||||
|
|
||||||
|
### Implementation Notes
|
||||||
|
- `_focusedUserId` field on `ScryingPoolStrip`
|
||||||
|
- `_prepareContext` filters or transforms participant list: if `_focusedUserId` set, only that participant is visible; others have `hidden: true` (but preserved in DOM)
|
||||||
|
- Restore clears `_focusedUserId` → re-render → full list visible
|
||||||
|
- CSS: `.sp-participant-avatar.sp-state-focused` inherits existing state ring pattern (green → gold via `--sp-urgency-director`)
|
||||||
|
- No socket broadcast — purely local UI state
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Feature Addendum (2026-05-27): Auto Position Snapshots
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
Strip position is saved only on close. If the browser window is resized, display changed, or the strip is accidentally dragged off-screen, there is no way to restore a known-good position without relaunching.
|
||||||
|
|
||||||
|
### Decision: Periodic auto-save + explicit save/restore
|
||||||
|
|
||||||
|
| Decision | Choice | Rationale |
|
||||||
|
|---|---|---|
|
||||||
|
| Auto-save trigger | `debounced` save on `mouseup` after drag ends | Saves only when user finishes moving; no save storm during drag |
|
||||||
|
| Auto-save interval | Also every 30s via `setInterval` while strip is open | Safety net if drag event fails to fire |
|
||||||
|
| Storage | User flag: `game.user.setFlag('scrying-pool', 'stripState')` | Already partially used (saves on close); extend to include timestamp |
|
||||||
|
| Save payload | `{ left, top, width, height, savedAt }` | Position + dimensions + timestamp for diagnostics |
|
||||||
|
| Restore trigger | On `_onRender` — if saved position exists and strip has no explicit position yet | First render gets saved position |
|
||||||
|
| Reset | Director's Board button "Reset strip position" → clears flag + re-renders at default position | Manual escape hatch |
|
||||||
|
| Multi-monitor safety | Validate `saved.left` and `saved.top` are within available viewport (`window.screen.availWidth/Height`) before applying | Prevents strip from loading off-screen after monitor config change |
|
||||||
|
|
||||||
|
### Implementation Notes
|
||||||
|
- Extend existing `_loadPosition()` in `ScryingPoolStrip` — already reads `stripState` flag
|
||||||
|
- Add `_savePosition()` called on `mouseup` after drag + every 30s interval
|
||||||
|
- Viewport validation: `saved.left < screen.availWidth - 50 && saved.top < screen.availHeight - 50`
|
||||||
|
- On validation failure: silently fall back to default position (no error notification)
|
||||||
|
- Director's Board: add "Reset strip position" button (minor template change)
|
||||||
|
- Extends existing `stripState` flag — no new flags needed, backward-compatible with old saves
|
||||||
|
|||||||
@@ -30,6 +30,12 @@
|
|||||||
"avConfigGMOnly": "A/V settings are managed by the GM.",
|
"avConfigGMOnly": "A/V settings are managed by the GM.",
|
||||||
"AVDisabled": "Audio/Video is not available in this FoundryVTT instance. Scrying Pool camera control features are disabled."
|
"AVDisabled": "Audio/Video is not available in this FoundryVTT instance. Scrying Pool camera control features are disabled."
|
||||||
},
|
},
|
||||||
|
"stream": {
|
||||||
|
"lost": "Video stream lost for {name}",
|
||||||
|
"recovering": "Attempting to recover video for {name}…",
|
||||||
|
"recovered": "Video stream recovered for {name}",
|
||||||
|
"failed": "Unable to recover video for {name}. Showing avatar fallback."
|
||||||
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"showGMSelfFeed": {
|
"showGMSelfFeed": {
|
||||||
"label": "Show GM Self Feed",
|
"label": "Show GM Self Feed",
|
||||||
@@ -73,7 +79,8 @@
|
|||||||
"avModeEnable": "Enable A/V",
|
"avModeEnable": "Enable A/V",
|
||||||
"avModeDisable": "Disable A/V",
|
"avModeDisable": "Disable A/V",
|
||||||
"avConfig": "A/V Settings…",
|
"avConfig": "A/V Settings…",
|
||||||
"avConfigTitle": "Open Foundry A/V server settings (signaling server, LiveKit, etc.)"
|
"avConfigTitle": "Open Foundry A/V server settings (signaling server, LiveKit, etc.)",
|
||||||
|
"resetStrip": "Reset Strip Position"
|
||||||
},
|
},
|
||||||
"bulk": {
|
"bulk": {
|
||||||
"showAll": "Show All",
|
"showAll": "Show All",
|
||||||
|
|||||||
@@ -30,6 +30,12 @@
|
|||||||
"avConfigGMOnly": "Les paramètres audio/vidéo sont gérés par le MJ.",
|
"avConfigGMOnly": "Les paramètres audio/vidéo sont gérés par le MJ.",
|
||||||
"AVDisabled": "L'audio/vidéo n'est pas disponible dans cette instance de FoundryVTT. Les fonctionnalités de contrôle caméra de Scrying Pool sont désactivées."
|
"AVDisabled": "L'audio/vidéo n'est pas disponible dans cette instance de FoundryVTT. Les fonctionnalités de contrôle caméra de Scrying Pool sont désactivées."
|
||||||
},
|
},
|
||||||
|
"stream": {
|
||||||
|
"lost": "Flux vidéo perdu pour {name}",
|
||||||
|
"recovering": "Tentative de récupération de la vidéo pour {name}…",
|
||||||
|
"recovered": "Flux vidéo rétabli pour {name}",
|
||||||
|
"failed": "Impossible de récupérer la vidéo pour {name}. Affichage du portrait de secours."
|
||||||
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"showGMSelfFeed": {
|
"showGMSelfFeed": {
|
||||||
"label": "Afficher le flux du MJ",
|
"label": "Afficher le flux du MJ",
|
||||||
@@ -73,7 +79,8 @@
|
|||||||
"avModeEnable": "Activer A/V",
|
"avModeEnable": "Activer A/V",
|
||||||
"avModeDisable": "Désactiver A/V",
|
"avModeDisable": "Désactiver A/V",
|
||||||
"avConfig": "Paramètres A/V...",
|
"avConfig": "Paramètres A/V...",
|
||||||
"avConfigTitle": "Ouvrir les paramètres du serveur A/V de Foundry (serveur de signalisation, LiveKit, etc.)"
|
"avConfigTitle": "Ouvrir les paramètres du serveur A/V de Foundry (serveur de signalisation, LiveKit, etc.)",
|
||||||
|
"resetStrip": "Réinitialiser la position de la barre"
|
||||||
},
|
},
|
||||||
"bulk": {
|
"bulk": {
|
||||||
"showAll": "Tout afficher",
|
"showAll": "Tout afficher",
|
||||||
|
|||||||
@@ -163,6 +163,33 @@ Hooks.once("init", () => {
|
|||||||
onChange: () => roleRenderer?.rerenderStrip(),
|
onChange: () => roleRenderer?.rerenderStrip(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Tile shape for participant avatars in the Director's Board
|
||||||
|
adapter.settings.register("tileShape", {
|
||||||
|
scope: "world",
|
||||||
|
config: false,
|
||||||
|
type: String,
|
||||||
|
default: "circle",
|
||||||
|
onChange: () => roleRenderer?.rerenderStrip(),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Tile border width around video shapes (px). 0 = no border.
|
||||||
|
adapter.settings.register("tileBorderWidth", {
|
||||||
|
scope: "world",
|
||||||
|
config: false,
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
onChange: () => roleRenderer?.rerenderStrip(),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Tile border color around video shapes.
|
||||||
|
adapter.settings.register("tileBorderColor", {
|
||||||
|
scope: "world",
|
||||||
|
config: false,
|
||||||
|
type: String,
|
||||||
|
default: "#ffffff",
|
||||||
|
onChange: () => roleRenderer?.rerenderStrip(),
|
||||||
|
});
|
||||||
|
|
||||||
// Story 5.2: Video widget width customization — world-scoped settings for small and large tile widths
|
// Story 5.2: Video widget width customization — world-scoped settings for small and large tile widths
|
||||||
adapter.settings.register("widgetWidthSm", {
|
adapter.settings.register("widgetWidthSm", {
|
||||||
scope: "world",
|
scope: "world",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"id": "scrying-pool",
|
"id": "scrying-pool",
|
||||||
"title": "Scrying Pool",
|
"title": "Scrying Pool",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
|
"license": "CC-BY-NC-SA-4.0",
|
||||||
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
"description": "GM camera visibility control for FoundryVTT v14+ — hide, show, and manage participant feeds in real time.",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "scrying-pool",
|
"name": "scrying-pool",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
|
"license": "CC-BY-NC-SA-4.0",
|
||||||
"description": "FoundryVTT v14 module — Scrying Pool camera visibility control",
|
"description": "FoundryVTT v14 module — Scrying Pool camera visibility control",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
|
After Width: | Height: | Size: 257 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 252 KiB |
|
After Width: | Height: | Size: 268 KiB |
|
After Width: | Height: | Size: 262 KiB |
@@ -0,0 +1,619 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=4_61 ignored
|
||||||
|
uid=4_62 ignored
|
||||||
|
uid=4_63 generic
|
||||||
|
uid=4_64 list
|
||||||
|
uid=4_65 listitem level="1"
|
||||||
|
uid=4_66 ignored
|
||||||
|
uid=2_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=4_67 generic
|
||||||
|
uid=4_68 generic
|
||||||
|
uid=4_69 LabelText
|
||||||
|
uid=2_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=2_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=7_0 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=4_70 generic
|
||||||
|
uid=4_71 LabelText
|
||||||
|
uid=2_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=2_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=9_0 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=2_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" focusable focused selectable selected
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_495 figure
|
||||||
|
uid=4_496 image url="https://localhost:31000/ui/pause.svg"
|
||||||
|
uid=4_497 Figcaption
|
||||||
|
uid=1_731 StaticText "JEU EN PAUSE"
|
||||||
|
uid=1_81 InlineTextBox "JEU EN PAUSE"
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_500 generic
|
||||||
|
uid=4_501 generic
|
||||||
|
uid=2_41 complementary "Scrying Pool"
|
||||||
|
uid=4_502 ignored
|
||||||
|
uid=2_43 button "Close Scrying Pool"
|
||||||
|
uid=4_503 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_504 ignored
|
||||||
|
uid=2_46 button "Expand Scrying Pool" expandable
|
||||||
|
uid=4_505 generic
|
||||||
|
uid=2_48 button "Open Director's Board"
|
||||||
|
uid=4_506 ignored
|
||||||
|
uid=4_507 ignored
|
||||||
|
uid=4_508 StaticText "Director's Board"
|
||||||
|
uid=1_81 InlineTextBox "Director's Board"
|
||||||
|
uid=4_509 list
|
||||||
|
uid=4_510 listitem level="1"
|
||||||
|
uid=2_54 button "Gamemaster — Active"
|
||||||
|
uid=4_511 ignored
|
||||||
|
uid=4_512 ignored
|
||||||
|
uid=4_513 ignored
|
||||||
|
uid=4_514 ignored
|
||||||
|
uid=4_515 ignored
|
||||||
|
uid=4_516 ignored
|
||||||
|
uid=4_517 ignored
|
||||||
|
uid=4_518 ignored
|
||||||
|
uid=4_519 ignored
|
||||||
|
uid=4_520 ignored
|
||||||
|
uid=4_521 ignored
|
||||||
|
uid=4_522 ignored
|
||||||
|
uid=4_523 ignored
|
||||||
|
uid=4_524 ignored
|
||||||
|
uid=4_525 ignored
|
||||||
|
uid=4_526 ignored
|
||||||
|
uid=4_527 ignored
|
||||||
|
uid=4_528 ignored
|
||||||
|
uid=4_529 ignored
|
||||||
|
uid=4_530 ignored
|
||||||
|
uid=4_531 ignored
|
||||||
|
uid=4_532 ignored
|
||||||
|
uid=4_533 ignored
|
||||||
|
uid=4_534 ignored
|
||||||
|
uid=4_535 ignored
|
||||||
|
uid=4_536 ignored
|
||||||
|
uid=4_537 ignored
|
||||||
|
uid=4_538 ignored
|
||||||
|
uid=4_539 ignored
|
||||||
|
uid=4_540 ignored
|
||||||
|
uid=4_541 ignored
|
||||||
|
uid=4_542 ignored
|
||||||
|
uid=4_543 ignored
|
||||||
|
uid=4_544 ignored
|
||||||
|
uid=4_545 ignored
|
||||||
|
uid=4_546 ignored
|
||||||
|
uid=4_547 listitem level="1"
|
||||||
|
uid=2_92 button "Player2 — Active"
|
||||||
|
uid=4_548 listitem level="1"
|
||||||
|
uid=2_94 button "Player3 — Active"
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=9_67 ignored
|
||||||
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 244 KiB |
@@ -0,0 +1,639 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=4_61 ignored
|
||||||
|
uid=4_62 ignored
|
||||||
|
uid=4_63 generic
|
||||||
|
uid=4_64 list
|
||||||
|
uid=4_65 listitem level="1"
|
||||||
|
uid=4_66 ignored
|
||||||
|
uid=2_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=4_67 generic
|
||||||
|
uid=4_68 generic
|
||||||
|
uid=4_69 LabelText
|
||||||
|
uid=2_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=2_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=10_0 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=4_70 generic
|
||||||
|
uid=4_71 LabelText
|
||||||
|
uid=2_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=2_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=10_1 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=2_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" focusable focused selectable selected
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_500 generic
|
||||||
|
uid=4_501 generic
|
||||||
|
uid=2_41 complementary "Scrying Pool"
|
||||||
|
uid=4_502 ignored
|
||||||
|
uid=2_43 button "Close Scrying Pool"
|
||||||
|
uid=4_503 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_504 ignored
|
||||||
|
uid=2_46 button "Expand Scrying Pool" expandable
|
||||||
|
uid=4_505 generic
|
||||||
|
uid=2_48 button "Open Director's Board"
|
||||||
|
uid=4_506 ignored
|
||||||
|
uid=4_507 ignored
|
||||||
|
uid=4_508 StaticText "Director's Board"
|
||||||
|
uid=1_81 InlineTextBox "Director's Board"
|
||||||
|
uid=4_509 list
|
||||||
|
uid=4_510 listitem level="1"
|
||||||
|
uid=2_54 button "Gamemaster — Active"
|
||||||
|
uid=4_511 ignored
|
||||||
|
uid=4_512 ignored
|
||||||
|
uid=4_513 ignored
|
||||||
|
uid=4_514 ignored
|
||||||
|
uid=4_515 ignored
|
||||||
|
uid=4_516 ignored
|
||||||
|
uid=4_517 ignored
|
||||||
|
uid=4_518 ignored
|
||||||
|
uid=4_519 ignored
|
||||||
|
uid=4_520 ignored
|
||||||
|
uid=4_521 ignored
|
||||||
|
uid=4_522 ignored
|
||||||
|
uid=4_523 ignored
|
||||||
|
uid=4_524 ignored
|
||||||
|
uid=4_525 ignored
|
||||||
|
uid=4_526 ignored
|
||||||
|
uid=4_527 ignored
|
||||||
|
uid=4_528 ignored
|
||||||
|
uid=4_529 ignored
|
||||||
|
uid=4_530 ignored
|
||||||
|
uid=4_531 ignored
|
||||||
|
uid=4_532 ignored
|
||||||
|
uid=4_533 ignored
|
||||||
|
uid=4_534 ignored
|
||||||
|
uid=4_535 ignored
|
||||||
|
uid=4_536 ignored
|
||||||
|
uid=4_537 ignored
|
||||||
|
uid=4_538 ignored
|
||||||
|
uid=4_539 ignored
|
||||||
|
uid=4_540 ignored
|
||||||
|
uid=4_541 ignored
|
||||||
|
uid=4_542 ignored
|
||||||
|
uid=4_543 ignored
|
||||||
|
uid=4_544 ignored
|
||||||
|
uid=4_545 ignored
|
||||||
|
uid=4_546 ignored
|
||||||
|
uid=4_547 listitem level="1"
|
||||||
|
uid=2_92 button "Player2 — Active"
|
||||||
|
uid=4_548 listitem level="1"
|
||||||
|
uid=2_94 button "Player3 — Active"
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=9_67 ignored
|
||||||
|
uid=10_2 generic
|
||||||
|
uid=10_3 generic
|
||||||
|
uid=10_4 generic
|
||||||
|
uid=10_5 generic
|
||||||
|
uid=10_6 generic description="Drag to move"
|
||||||
|
uid=10_7 generic
|
||||||
|
uid=10_8 button
|
||||||
|
uid=10_9 generic
|
||||||
|
uid=10_10 ignored
|
||||||
|
uid=10_11 heading "Paramètres Scrying Pool" level="2"
|
||||||
|
uid=10_12 StaticText "Paramètres Scrying Pool"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres Scrying Pool"
|
||||||
|
uid=10_13 paragraph
|
||||||
|
uid=10_14 StaticText "Configurer le comportement du module Scrying Pool"
|
||||||
|
uid=1_81 InlineTextBox "Configurer le comportement du module Scrying Pool"
|
||||||
|
uid=10_15 ignored
|
||||||
|
uid=10_16 ignored
|
||||||
|
uid=10_17 LabelText
|
||||||
|
uid=10_18 StaticText "État de la barre"
|
||||||
|
uid=1_81 InlineTextBox "État de la barre"
|
||||||
|
uid=10_19 button "Fermer la barre"
|
||||||
|
uid=10_20 generic
|
||||||
|
uid=10_21 StaticText "Fermer la barre"
|
||||||
|
uid=1_81 InlineTextBox "Fermer la barre"
|
||||||
|
uid=10_22 generic
|
||||||
@@ -0,0 +1,591 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=11_0 ignored
|
||||||
|
uid=11_1 ignored
|
||||||
|
uid=11_2 generic
|
||||||
|
uid=11_3 list
|
||||||
|
uid=11_4 listitem level="1"
|
||||||
|
uid=11_5 ignored
|
||||||
|
uid=11_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=11_7 generic
|
||||||
|
uid=11_8 generic
|
||||||
|
uid=11_9 LabelText
|
||||||
|
uid=11_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=11_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=11_12 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=11_13 generic
|
||||||
|
uid=11_14 LabelText
|
||||||
|
uid=11_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=11_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=11_17 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=11_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=11_19 generic
|
||||||
|
uid=11_20 ignored
|
||||||
|
uid=11_21 ignored
|
||||||
|
uid=11_22 heading "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR" level="2"
|
||||||
|
uid=11_23 StaticText "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=1_81 InlineTextBox "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=11_24 button "Close"
|
||||||
|
uid=11_25 generic
|
||||||
|
uid=11_26 paragraph
|
||||||
|
uid=11_27 StaticText "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)"
|
||||||
|
uid=1_81 InlineTextBox "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation "
|
||||||
|
uid=1_81 InlineTextBox "(lecture seule)"
|
||||||
|
uid=11_28 ignored
|
||||||
|
uid=11_29 generic
|
||||||
|
uid=11_30 ignored
|
||||||
|
uid=11_31 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=11_32 ignored
|
||||||
|
uid=11_33 StaticText "GM"
|
||||||
|
uid=1_81 InlineTextBox "GM"
|
||||||
|
uid=11_34 generic description="Player2 — Player"
|
||||||
|
uid=11_35 ignored
|
||||||
|
uid=11_36 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=11_37 ignored
|
||||||
|
uid=11_38 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=11_39 generic
|
||||||
|
uid=11_40 ignored
|
||||||
|
uid=11_41 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=11_42 ignored
|
||||||
|
uid=11_43 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=4_647 tooltip "Player2 — Player"
|
||||||
|
uid=11_44 StaticText "Player2 — Player"
|
||||||
|
uid=1_81 InlineTextBox "Player2 — Player"
|
||||||
|
After Width: | Height: | Size: 241 KiB |
@@ -0,0 +1,641 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=11_0 ignored
|
||||||
|
uid=11_1 ignored
|
||||||
|
uid=11_2 generic
|
||||||
|
uid=11_3 list
|
||||||
|
uid=11_4 listitem level="1"
|
||||||
|
uid=11_5 ignored
|
||||||
|
uid=11_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=11_7 generic
|
||||||
|
uid=11_8 generic
|
||||||
|
uid=11_9 LabelText
|
||||||
|
uid=11_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=11_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=12_0 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=11_13 generic
|
||||||
|
uid=11_14 LabelText
|
||||||
|
uid=11_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=11_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=12_1 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=11_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=11_19 generic
|
||||||
|
uid=11_20 ignored
|
||||||
|
uid=11_21 ignored
|
||||||
|
uid=11_22 heading "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR" level="2"
|
||||||
|
uid=11_23 StaticText "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=1_81 InlineTextBox "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=11_24 button "Close"
|
||||||
|
uid=11_25 generic
|
||||||
|
uid=11_26 paragraph
|
||||||
|
uid=11_27 StaticText "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)"
|
||||||
|
uid=1_81 InlineTextBox "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation "
|
||||||
|
uid=1_81 InlineTextBox "(lecture seule)"
|
||||||
|
uid=11_28 ignored
|
||||||
|
uid=11_29 generic
|
||||||
|
uid=11_30 ignored
|
||||||
|
uid=11_31 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=11_32 ignored
|
||||||
|
uid=11_33 StaticText "GM"
|
||||||
|
uid=1_81 InlineTextBox "GM"
|
||||||
|
uid=11_34 generic
|
||||||
|
uid=11_35 ignored
|
||||||
|
uid=11_36 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=11_37 ignored
|
||||||
|
uid=11_38 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=11_39 generic
|
||||||
|
uid=11_40 ignored
|
||||||
|
uid=11_41 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=11_42 ignored
|
||||||
|
uid=11_43 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=11_44 ignored
|
||||||
|
uid=12_2 generic
|
||||||
|
uid=12_3 banner
|
||||||
|
uid=12_4 heading "Player Privacy Panel" level="1"
|
||||||
|
uid=12_5 StaticText "Player Privacy Panel"
|
||||||
|
uid=1_81 InlineTextBox "Player Privacy Panel"
|
||||||
|
uid=12_6 button "Basculer les contrôles"
|
||||||
|
uid=12_7 button "Fermer la fenêtre"
|
||||||
|
uid=12_8 generic
|
||||||
|
uid=12_9 ignored
|
||||||
|
uid=12_10 ignored
|
||||||
|
uid=12_11 generic
|
||||||
|
uid=12_12 heading "CONSENTEMENTS D'AUTOMATISATION" level="3"
|
||||||
|
uid=12_13 StaticText "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=1_81 InlineTextBox "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=12_14 paragraph
|
||||||
|
uid=12_15 StaticText "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre caméra et votre présence à l'écran."
|
||||||
|
uid=1_81 InlineTextBox "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre "
|
||||||
|
uid=1_81 InlineTextBox "caméra et votre présence à l'écran."
|
||||||
|
uid=12_16 ignored
|
||||||
|
uid=12_17 ignored
|
||||||
|
uid=12_18 ignored
|
||||||
|
uid=12_19 heading "Caméra de réaction" level="4"
|
||||||
|
uid=12_20 StaticText "Caméra de réaction"
|
||||||
|
uid=1_81 InlineTextBox "Caméra de réaction"
|
||||||
|
uid=12_21 ignored
|
||||||
|
uid=12_22 LabelText
|
||||||
|
uid=12_23 checkbox "Caméra de réaction"
|
||||||
|
uid=12_24 ignored
|
||||||
|
uid=12_25 ignored
|
||||||
|
uid=12_26 StaticText "DÉSACTIVÉ"
|
||||||
|
uid=1_81 InlineTextBox "DÉSACTIVÉ"
|
||||||
|
uid=12_27 paragraph
|
||||||
|
uid=12_28 StaticText "Affiche automatiquement votre caméra pendant les moments clés (combats, jets de dés, etc.)"
|
||||||
|
uid=1_81 InlineTextBox "Affiche automatiquement votre caméra pendant les moments clés "
|
||||||
|
uid=1_81 InlineTextBox "(combats, jets de dés, etc.)"
|
||||||
|
uid=12_29 generic
|
||||||
|
uid=12_30 heading "PORTRAIT DE SECOURS" level="3"
|
||||||
|
uid=12_31 StaticText "PORTRAIT DE SECOURS"
|
||||||
|
uid=1_81 InlineTextBox "PORTRAIT DE SECOURS"
|
||||||
|
uid=12_32 paragraph
|
||||||
|
uid=12_33 StaticText "Image à afficher lorsque votre caméra n'est pas disponible ou ne fonctionne pas."
|
||||||
|
uid=1_81 InlineTextBox "Image à afficher lorsque votre caméra n'est pas disponible ou ne "
|
||||||
|
uid=1_81 InlineTextBox "fonctionne pas."
|
||||||
|
uid=12_34 ignored
|
||||||
|
uid=12_35 ignored
|
||||||
|
uid=12_36 image "Portrait preview" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=12_37 ignored
|
||||||
|
uid=12_38 button "Choisir une image"
|
||||||
|
uid=12_39 ignored
|
||||||
|
uid=12_40 StaticText "Choisir une image"
|
||||||
|
uid=1_81 InlineTextBox "Choisir une image"
|
||||||
|
After Width: | Height: | Size: 245 KiB |
@@ -0,0 +1,641 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=11_0 ignored
|
||||||
|
uid=11_1 ignored
|
||||||
|
uid=11_2 generic
|
||||||
|
uid=11_3 list
|
||||||
|
uid=11_4 listitem level="1"
|
||||||
|
uid=11_5 ignored
|
||||||
|
uid=11_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=11_7 generic
|
||||||
|
uid=11_8 generic
|
||||||
|
uid=11_9 LabelText
|
||||||
|
uid=11_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=11_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=14_0 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=11_13 generic
|
||||||
|
uid=11_14 LabelText
|
||||||
|
uid=11_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=11_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=14_1 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=11_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=11_19 generic
|
||||||
|
uid=11_20 ignored
|
||||||
|
uid=11_21 ignored
|
||||||
|
uid=11_22 heading "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR" level="2"
|
||||||
|
uid=11_23 StaticText "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=1_81 InlineTextBox "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=11_24 button "Close"
|
||||||
|
uid=11_25 generic
|
||||||
|
uid=11_26 paragraph
|
||||||
|
uid=11_27 StaticText "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)"
|
||||||
|
uid=1_81 InlineTextBox "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation "
|
||||||
|
uid=1_81 InlineTextBox "(lecture seule)"
|
||||||
|
uid=11_28 ignored
|
||||||
|
uid=11_29 generic
|
||||||
|
uid=11_30 ignored
|
||||||
|
uid=11_31 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=11_32 ignored
|
||||||
|
uid=11_33 StaticText "GM"
|
||||||
|
uid=1_81 InlineTextBox "GM"
|
||||||
|
uid=11_34 generic
|
||||||
|
uid=11_35 ignored
|
||||||
|
uid=11_36 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=11_37 ignored
|
||||||
|
uid=11_38 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=11_39 generic
|
||||||
|
uid=11_40 ignored
|
||||||
|
uid=11_41 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=11_42 ignored
|
||||||
|
uid=11_43 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=11_44 ignored
|
||||||
|
uid=12_2 generic
|
||||||
|
uid=12_3 banner
|
||||||
|
uid=12_4 heading "Player Privacy Panel" level="1"
|
||||||
|
uid=12_5 StaticText "Player Privacy Panel"
|
||||||
|
uid=1_81 InlineTextBox "Player Privacy Panel"
|
||||||
|
uid=12_6 button "Basculer les contrôles"
|
||||||
|
uid=12_7 button "Fermer la fenêtre"
|
||||||
|
uid=12_8 generic
|
||||||
|
uid=12_9 ignored
|
||||||
|
uid=12_10 ignored
|
||||||
|
uid=12_11 generic
|
||||||
|
uid=12_12 heading "CONSENTEMENTS D'AUTOMATISATION" level="3"
|
||||||
|
uid=12_13 StaticText "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=1_81 InlineTextBox "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=12_14 paragraph
|
||||||
|
uid=12_15 StaticText "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre caméra et votre présence à l'écran."
|
||||||
|
uid=1_81 InlineTextBox "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre "
|
||||||
|
uid=1_81 InlineTextBox "caméra et votre présence à l'écran."
|
||||||
|
uid=12_16 ignored
|
||||||
|
uid=12_17 ignored
|
||||||
|
uid=12_18 ignored
|
||||||
|
uid=12_19 heading "Caméra de réaction" level="4"
|
||||||
|
uid=12_20 StaticText "Caméra de réaction"
|
||||||
|
uid=1_81 InlineTextBox "Caméra de réaction"
|
||||||
|
uid=12_21 ignored
|
||||||
|
uid=12_22 LabelText
|
||||||
|
uid=12_23 checkbox "Caméra de réaction"
|
||||||
|
uid=12_24 ignored
|
||||||
|
uid=12_25 ignored
|
||||||
|
uid=12_26 StaticText "DÉSACTIVÉ"
|
||||||
|
uid=1_81 InlineTextBox "DÉSACTIVÉ"
|
||||||
|
uid=12_27 paragraph
|
||||||
|
uid=12_28 StaticText "Affiche automatiquement votre caméra pendant les moments clés (combats, jets de dés, etc.)"
|
||||||
|
uid=1_81 InlineTextBox "Affiche automatiquement votre caméra pendant les moments clés "
|
||||||
|
uid=1_81 InlineTextBox "(combats, jets de dés, etc.)"
|
||||||
|
uid=12_29 generic
|
||||||
|
uid=12_30 heading "PORTRAIT DE SECOURS" level="3"
|
||||||
|
uid=12_31 StaticText "PORTRAIT DE SECOURS"
|
||||||
|
uid=1_81 InlineTextBox "PORTRAIT DE SECOURS"
|
||||||
|
uid=12_32 paragraph
|
||||||
|
uid=12_33 StaticText "Image à afficher lorsque votre caméra n'est pas disponible ou ne fonctionne pas."
|
||||||
|
uid=1_81 InlineTextBox "Image à afficher lorsque votre caméra n'est pas disponible ou ne "
|
||||||
|
uid=1_81 InlineTextBox "fonctionne pas."
|
||||||
|
uid=12_34 ignored
|
||||||
|
uid=12_35 ignored
|
||||||
|
uid=12_36 image "Portrait preview" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=12_37 ignored
|
||||||
|
uid=12_38 button "Choisir une image"
|
||||||
|
uid=12_39 ignored
|
||||||
|
uid=12_40 StaticText "Choisir une image"
|
||||||
|
uid=1_81 InlineTextBox "Choisir une image"
|
||||||
@@ -0,0 +1,666 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=11_0 ignored
|
||||||
|
uid=11_1 ignored
|
||||||
|
uid=11_2 generic
|
||||||
|
uid=11_3 list
|
||||||
|
uid=11_4 listitem level="1"
|
||||||
|
uid=11_5 ignored
|
||||||
|
uid=11_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=11_7 generic
|
||||||
|
uid=11_8 generic
|
||||||
|
uid=11_9 LabelText
|
||||||
|
uid=11_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=11_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=14_0 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=11_13 generic
|
||||||
|
uid=11_14 LabelText
|
||||||
|
uid=11_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=11_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=15_0 StaticText "31"
|
||||||
|
uid=1_81 InlineTextBox "31"
|
||||||
|
uid=11_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_549 generic
|
||||||
|
uid=4_550 generic
|
||||||
|
uid=4_551 generic
|
||||||
|
uid=4_552 ignored
|
||||||
|
uid=2_99 button "Fermer"
|
||||||
|
uid=4_553 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=4_554 list "Tableau du Réalisateur"
|
||||||
|
uid=2_102 listitem "Gamemaster" level="1"
|
||||||
|
uid=4_555 generic
|
||||||
|
uid=2_104 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_556 paragraph
|
||||||
|
uid=2_106 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=2_107 button "Hide Gamemaster"
|
||||||
|
uid=4_557 ignored
|
||||||
|
uid=2_109 listitem "Player2" level="1"
|
||||||
|
uid=4_558 generic
|
||||||
|
uid=2_111 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=2_112 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=4_559 ignored
|
||||||
|
uid=4_560 paragraph
|
||||||
|
uid=2_115 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=2_116 button "Hide Player2"
|
||||||
|
uid=4_561 ignored
|
||||||
|
uid=2_118 listitem "Player3" level="1"
|
||||||
|
uid=4_562 generic
|
||||||
|
uid=2_120 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=4_563 paragraph
|
||||||
|
uid=2_122 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=2_123 button "Hide Player3"
|
||||||
|
uid=4_564 ignored
|
||||||
|
uid=8_18 ignored
|
||||||
|
uid=8_19 ignored
|
||||||
|
uid=8_20 ignored
|
||||||
|
uid=8_22 ignored
|
||||||
|
uid=8_23 ignored
|
||||||
|
uid=8_24 ignored
|
||||||
|
uid=8_25 ignored
|
||||||
|
uid=8_26 ignored
|
||||||
|
uid=8_27 ignored
|
||||||
|
uid=8_29 ignored
|
||||||
|
uid=8_30 ignored
|
||||||
|
uid=8_31 ignored
|
||||||
|
uid=8_32 ignored
|
||||||
|
uid=8_33 ignored
|
||||||
|
uid=4_579 ignored
|
||||||
|
uid=2_140 button "Tout afficher"
|
||||||
|
uid=4_580 ignored
|
||||||
|
uid=4_581 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=2_143 button "Tout masquer"
|
||||||
|
uid=4_582 ignored
|
||||||
|
uid=4_583 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=2_146 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=4_584 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=4_585 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=4_586 ignored
|
||||||
|
uid=2_150 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=4_587 ignored
|
||||||
|
uid=2_152 button "S"
|
||||||
|
uid=4_588 ignored
|
||||||
|
uid=4_589 ignored
|
||||||
|
uid=4_590 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_156 button "L"
|
||||||
|
uid=4_591 ignored
|
||||||
|
uid=4_592 ignored
|
||||||
|
uid=4_593 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_160 button "S"
|
||||||
|
uid=4_594 ignored
|
||||||
|
uid=4_595 ignored
|
||||||
|
uid=4_596 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_164 button "L"
|
||||||
|
uid=4_597 ignored
|
||||||
|
uid=4_598 ignored
|
||||||
|
uid=4_599 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=2_168 button "S"
|
||||||
|
uid=4_600 ignored
|
||||||
|
uid=4_601 ignored
|
||||||
|
uid=4_602 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=2_172 button "L"
|
||||||
|
uid=4_603 ignored
|
||||||
|
uid=4_604 ignored
|
||||||
|
uid=4_605 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=4_606 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=2_177 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=4_607 ignored
|
||||||
|
uid=4_608 generic
|
||||||
|
uid=2_180 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=2_181 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=4_609 MenuListPopup
|
||||||
|
uid=2_183 option "60px" selectable value="60px"
|
||||||
|
uid=2_184 option "80px" selectable value="80px"
|
||||||
|
uid=2_185 option "100px" selectable selected value="100px"
|
||||||
|
uid=2_186 option "120px" selectable value="120px"
|
||||||
|
uid=2_187 option "150px" selectable value="150px"
|
||||||
|
uid=2_188 option "200px" selectable value="200px"
|
||||||
|
uid=4_610 generic
|
||||||
|
uid=2_190 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=2_191 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=4_611 MenuListPopup
|
||||||
|
uid=2_193 option "60px" selectable value="60px"
|
||||||
|
uid=2_194 option "80px" selectable value="80px"
|
||||||
|
uid=2_195 option "100px" selectable value="100px"
|
||||||
|
uid=2_196 option "120px" selectable value="120px"
|
||||||
|
uid=2_197 option "150px" selectable selected value="150px"
|
||||||
|
uid=2_198 option "200px" selectable value="200px"
|
||||||
|
uid=4_612 sectionfooter
|
||||||
|
uid=4_613 ignored
|
||||||
|
uid=2_201 button "Sauvegarder la disposition"
|
||||||
|
uid=4_614 ignored
|
||||||
|
uid=4_615 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=2_204 button "Charger la disposition" disableable disabled
|
||||||
|
uid=4_616 ignored
|
||||||
|
uid=4_617 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=2_207 button "Exporter"
|
||||||
|
uid=4_618 ignored
|
||||||
|
uid=4_619 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=2_210 button "Importer"
|
||||||
|
uid=4_620 ignored
|
||||||
|
uid=4_621 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=4_622 ignored
|
||||||
|
uid=2_214 button "Application auto..."
|
||||||
|
uid=4_623 ignored
|
||||||
|
uid=4_624 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=2_217 button "Désactiver A/V"
|
||||||
|
uid=4_625 ignored
|
||||||
|
uid=4_626 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=2_220 button "Paramètres A/V..."
|
||||||
|
uid=4_627 ignored
|
||||||
|
uid=4_628 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=4_629 generic
|
||||||
|
uid=11_19 generic
|
||||||
|
uid=11_20 ignored
|
||||||
|
uid=11_21 ignored
|
||||||
|
uid=11_22 heading "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR" level="2"
|
||||||
|
uid=11_23 StaticText "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=1_81 InlineTextBox "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=11_24 button "Close"
|
||||||
|
uid=11_25 generic
|
||||||
|
uid=11_26 paragraph
|
||||||
|
uid=11_27 StaticText "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)"
|
||||||
|
uid=1_81 InlineTextBox "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation "
|
||||||
|
uid=1_81 InlineTextBox "(lecture seule)"
|
||||||
|
uid=11_28 ignored
|
||||||
|
uid=11_29 generic
|
||||||
|
uid=11_30 ignored
|
||||||
|
uid=11_31 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=11_32 ignored
|
||||||
|
uid=11_33 StaticText "GM"
|
||||||
|
uid=1_81 InlineTextBox "GM"
|
||||||
|
uid=11_34 generic
|
||||||
|
uid=11_35 ignored
|
||||||
|
uid=11_36 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=11_37 ignored
|
||||||
|
uid=11_38 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=11_39 generic
|
||||||
|
uid=11_40 ignored
|
||||||
|
uid=11_41 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=11_42 ignored
|
||||||
|
uid=11_43 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=11_44 ignored
|
||||||
|
uid=12_2 generic
|
||||||
|
uid=12_3 banner
|
||||||
|
uid=12_4 heading "Player Privacy Panel" level="1"
|
||||||
|
uid=12_5 StaticText "Player Privacy Panel"
|
||||||
|
uid=1_81 InlineTextBox "Player Privacy Panel"
|
||||||
|
uid=12_6 button "Basculer les contrôles"
|
||||||
|
uid=12_7 button "Fermer la fenêtre"
|
||||||
|
uid=12_8 generic
|
||||||
|
uid=12_9 ignored
|
||||||
|
uid=12_10 ignored
|
||||||
|
uid=12_11 generic
|
||||||
|
uid=12_12 heading "CONSENTEMENTS D'AUTOMATISATION" level="3"
|
||||||
|
uid=12_13 StaticText "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=1_81 InlineTextBox "CONSENTEMENTS D'AUTOMATISATION"
|
||||||
|
uid=12_14 paragraph
|
||||||
|
uid=12_15 StaticText "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre caméra et votre présence à l'écran."
|
||||||
|
uid=1_81 InlineTextBox "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre "
|
||||||
|
uid=1_81 InlineTextBox "caméra et votre présence à l'écran."
|
||||||
|
uid=12_16 ignored
|
||||||
|
uid=12_17 ignored
|
||||||
|
uid=12_18 ignored
|
||||||
|
uid=12_19 heading "Caméra de réaction" level="4"
|
||||||
|
uid=12_20 StaticText "Caméra de réaction"
|
||||||
|
uid=1_81 InlineTextBox "Caméra de réaction"
|
||||||
|
uid=12_21 ignored
|
||||||
|
uid=12_22 LabelText
|
||||||
|
uid=12_23 checkbox "Caméra de réaction"
|
||||||
|
uid=12_24 ignored
|
||||||
|
uid=12_25 ignored
|
||||||
|
uid=12_26 StaticText "DÉSACTIVÉ"
|
||||||
|
uid=1_81 InlineTextBox "DÉSACTIVÉ"
|
||||||
|
uid=12_27 paragraph
|
||||||
|
uid=12_28 StaticText "Affiche automatiquement votre caméra pendant les moments clés (combats, jets de dés, etc.)"
|
||||||
|
uid=1_81 InlineTextBox "Affiche automatiquement votre caméra pendant les moments clés "
|
||||||
|
uid=1_81 InlineTextBox "(combats, jets de dés, etc.)"
|
||||||
|
uid=12_29 generic
|
||||||
|
uid=12_30 heading "PORTRAIT DE SECOURS" level="3"
|
||||||
|
uid=12_31 StaticText "PORTRAIT DE SECOURS"
|
||||||
|
uid=1_81 InlineTextBox "PORTRAIT DE SECOURS"
|
||||||
|
uid=12_32 paragraph
|
||||||
|
uid=12_33 StaticText "Image à afficher lorsque votre caméra n'est pas disponible ou ne fonctionne pas."
|
||||||
|
uid=1_81 InlineTextBox "Image à afficher lorsque votre caméra n'est pas disponible ou ne "
|
||||||
|
uid=1_81 InlineTextBox "fonctionne pas."
|
||||||
|
uid=12_34 ignored
|
||||||
|
uid=12_35 ignored
|
||||||
|
uid=12_36 image "Portrait preview" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=12_37 ignored
|
||||||
|
uid=12_38 button "Choisir une image"
|
||||||
|
uid=12_39 ignored
|
||||||
|
uid=12_40 StaticText "Choisir une image"
|
||||||
|
uid=1_81 InlineTextBox "Choisir une image"
|
||||||
|
uid=15_1 generic
|
||||||
|
uid=15_2 generic
|
||||||
|
uid=15_3 generic
|
||||||
|
uid=15_4 generic
|
||||||
|
uid=15_5 generic description="Drag to move"
|
||||||
|
uid=15_6 generic
|
||||||
|
uid=15_7 button
|
||||||
|
uid=15_8 generic
|
||||||
|
uid=15_9 ignored
|
||||||
|
uid=15_10 heading "Paramètres Scrying Pool" level="2"
|
||||||
|
uid=15_11 StaticText "Paramètres Scrying Pool"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres Scrying Pool"
|
||||||
|
uid=15_12 paragraph
|
||||||
|
uid=15_13 StaticText "Configurer le comportement du module Scrying Pool"
|
||||||
|
uid=1_81 InlineTextBox "Configurer le comportement du module Scrying Pool"
|
||||||
|
uid=15_14 ignored
|
||||||
|
uid=15_15 ignored
|
||||||
|
uid=15_16 LabelText
|
||||||
|
uid=15_17 StaticText "État de la barre"
|
||||||
|
uid=1_81 InlineTextBox "État de la barre"
|
||||||
|
uid=15_18 button "Ouvrir la barre"
|
||||||
|
uid=15_19 generic
|
||||||
|
uid=15_20 StaticText "Ouvrir la barre"
|
||||||
|
uid=1_81 InlineTextBox "Ouvrir la barre"
|
||||||
|
uid=15_21 generic
|
||||||
@@ -0,0 +1,590 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=19_0 ignored
|
||||||
|
uid=19_1 ignored
|
||||||
|
uid=19_2 generic
|
||||||
|
uid=19_3 list
|
||||||
|
uid=19_4 listitem level="1"
|
||||||
|
uid=19_5 ignored
|
||||||
|
uid=19_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=19_7 generic
|
||||||
|
uid=19_8 generic
|
||||||
|
uid=19_9 LabelText
|
||||||
|
uid=19_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=19_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=19_12 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=19_13 generic
|
||||||
|
uid=19_14 LabelText
|
||||||
|
uid=19_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=19_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=19_17 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=19_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=11_19 generic
|
||||||
|
uid=11_20 ignored
|
||||||
|
uid=11_21 ignored
|
||||||
|
uid=11_22 heading "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR" level="2"
|
||||||
|
uid=11_23 StaticText "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=1_81 InlineTextBox "VOIR LES PARAMÈTRES DE CONFIDENTIALITÉ DU JOUEUR"
|
||||||
|
uid=11_24 button "Close"
|
||||||
|
uid=11_25 generic
|
||||||
|
uid=11_26 paragraph
|
||||||
|
uid=11_27 StaticText "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)"
|
||||||
|
uid=1_81 InlineTextBox "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation "
|
||||||
|
uid=1_81 InlineTextBox "(lecture seule)"
|
||||||
|
uid=11_28 ignored
|
||||||
|
uid=11_29 generic
|
||||||
|
uid=11_30 ignored
|
||||||
|
uid=11_31 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=11_32 ignored
|
||||||
|
uid=11_33 StaticText "GM"
|
||||||
|
uid=1_81 InlineTextBox "GM"
|
||||||
|
uid=11_34 generic
|
||||||
|
uid=11_35 ignored
|
||||||
|
uid=11_36 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=11_37 ignored
|
||||||
|
uid=11_38 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=11_39 generic
|
||||||
|
uid=11_40 ignored
|
||||||
|
uid=11_41 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=11_42 ignored
|
||||||
|
uid=11_43 StaticText "PLAYER"
|
||||||
|
uid=1_81 InlineTextBox "PLAYER"
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=16_38 ignored
|
||||||
|
uid=19_19 generic
|
||||||
|
uid=19_20 generic
|
||||||
|
uid=19_21 generic
|
||||||
|
uid=19_22 ignored
|
||||||
|
uid=19_23 button "Fermer"
|
||||||
|
uid=19_24 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=19_25 list "Tableau du Réalisateur"
|
||||||
|
uid=19_26 listitem "Gamemaster" level="1"
|
||||||
|
uid=19_27 generic
|
||||||
|
uid=19_28 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=19_29 paragraph
|
||||||
|
uid=19_30 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=19_31 button "Hide Gamemaster"
|
||||||
|
uid=19_32 ignored
|
||||||
|
uid=19_33 listitem "Player2" level="1"
|
||||||
|
uid=19_34 generic
|
||||||
|
uid=19_35 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=19_36 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=19_37 ignored
|
||||||
|
uid=19_38 paragraph
|
||||||
|
uid=19_39 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=19_40 button "Hide Player2"
|
||||||
|
uid=19_41 ignored
|
||||||
|
uid=19_42 listitem "Player3" level="1"
|
||||||
|
uid=19_43 generic
|
||||||
|
uid=19_44 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=19_45 paragraph
|
||||||
|
uid=19_46 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=19_47 button "Hide Player3"
|
||||||
|
uid=19_48 ignored
|
||||||
|
uid=19_49 ignored
|
||||||
|
uid=19_50 ignored
|
||||||
|
uid=19_51 ignored
|
||||||
|
uid=19_52 ignored
|
||||||
|
uid=19_53 ignored
|
||||||
|
uid=19_54 ignored
|
||||||
|
uid=19_55 ignored
|
||||||
|
uid=19_56 ignored
|
||||||
|
uid=19_57 ignored
|
||||||
|
uid=19_58 ignored
|
||||||
|
uid=19_59 ignored
|
||||||
|
uid=19_60 ignored
|
||||||
|
uid=19_61 ignored
|
||||||
|
uid=19_62 ignored
|
||||||
|
uid=19_63 ignored
|
||||||
|
uid=19_64 button "Tout afficher"
|
||||||
|
uid=19_65 ignored
|
||||||
|
uid=19_66 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=19_67 button "Tout masquer"
|
||||||
|
uid=19_68 ignored
|
||||||
|
uid=19_69 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=19_70 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=19_71 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=19_72 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=19_73 ignored
|
||||||
|
uid=19_74 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=19_75 ignored
|
||||||
|
uid=19_76 button "S"
|
||||||
|
uid=19_77 ignored
|
||||||
|
uid=19_78 ignored
|
||||||
|
uid=19_79 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=19_80 button "L"
|
||||||
|
uid=19_81 ignored
|
||||||
|
uid=19_82 ignored
|
||||||
|
uid=19_83 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=19_84 button "S"
|
||||||
|
uid=19_85 ignored
|
||||||
|
uid=19_86 ignored
|
||||||
|
uid=19_87 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=19_88 button "L"
|
||||||
|
uid=19_89 ignored
|
||||||
|
uid=19_90 ignored
|
||||||
|
uid=19_91 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=19_92 button "S"
|
||||||
|
uid=19_93 ignored
|
||||||
|
uid=19_94 ignored
|
||||||
|
uid=19_95 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=19_96 button "L"
|
||||||
|
uid=19_97 ignored
|
||||||
|
uid=19_98 ignored
|
||||||
|
uid=19_99 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=19_100 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=19_101 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=19_102 ignored
|
||||||
|
uid=19_103 generic
|
||||||
|
uid=19_104 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=19_105 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=19_106 MenuListPopup
|
||||||
|
uid=19_107 option "60px" selectable value="60px"
|
||||||
|
uid=19_108 option "80px" selectable value="80px"
|
||||||
|
uid=19_109 option "100px" selectable selected value="100px"
|
||||||
|
uid=19_110 option "120px" selectable value="120px"
|
||||||
|
uid=19_111 option "150px" selectable value="150px"
|
||||||
|
uid=19_112 option "200px" selectable value="200px"
|
||||||
|
uid=19_113 generic
|
||||||
|
uid=19_114 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=19_115 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=19_116 MenuListPopup
|
||||||
|
uid=19_117 option "60px" selectable value="60px"
|
||||||
|
uid=19_118 option "80px" selectable value="80px"
|
||||||
|
uid=19_119 option "100px" selectable value="100px"
|
||||||
|
uid=19_120 option "120px" selectable value="120px"
|
||||||
|
uid=19_121 option "150px" selectable selected value="150px"
|
||||||
|
uid=19_122 option "200px" selectable value="200px"
|
||||||
|
uid=19_123 sectionfooter
|
||||||
|
uid=19_124 ignored
|
||||||
|
uid=19_125 button "Sauvegarder la disposition"
|
||||||
|
uid=19_126 ignored
|
||||||
|
uid=19_127 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=19_128 button "Charger la disposition" disableable disabled
|
||||||
|
uid=19_129 ignored
|
||||||
|
uid=19_130 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=19_131 button "Exporter"
|
||||||
|
uid=19_132 ignored
|
||||||
|
uid=19_133 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=19_134 button "Importer"
|
||||||
|
uid=19_135 ignored
|
||||||
|
uid=19_136 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=19_137 ignored
|
||||||
|
uid=19_138 button "Application auto..."
|
||||||
|
uid=19_139 ignored
|
||||||
|
uid=19_140 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=19_141 button "Désactiver A/V"
|
||||||
|
uid=19_142 ignored
|
||||||
|
uid=19_143 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=19_144 button "Paramètres A/V..."
|
||||||
|
uid=19_145 ignored
|
||||||
|
uid=19_146 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=19_147 generic
|
||||||
@@ -0,0 +1,614 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=4_0 ignored
|
||||||
|
uid=4_1 generic
|
||||||
|
uid=4_2 list
|
||||||
|
uid=4_3 ignored
|
||||||
|
uid=4_4 ignored
|
||||||
|
uid=4_5 ignored
|
||||||
|
uid=4_6 ignored
|
||||||
|
uid=4_7 ignored
|
||||||
|
uid=4_8 ignored
|
||||||
|
uid=4_9 ignored
|
||||||
|
uid=4_10 ignored
|
||||||
|
uid=4_11 ignored
|
||||||
|
uid=4_12 ignored
|
||||||
|
uid=4_13 ignored
|
||||||
|
uid=4_14 ignored
|
||||||
|
uid=4_15 ignored
|
||||||
|
uid=4_16 ignored
|
||||||
|
uid=4_17 ignored
|
||||||
|
uid=4_18 ignored
|
||||||
|
uid=4_19 ignored
|
||||||
|
uid=4_20 ignored
|
||||||
|
uid=4_21 ignored
|
||||||
|
uid=4_22 ignored
|
||||||
|
uid=4_23 ignored
|
||||||
|
uid=4_24 ignored
|
||||||
|
uid=4_25 ignored
|
||||||
|
uid=4_26 ignored
|
||||||
|
uid=4_27 ignored
|
||||||
|
uid=4_28 ignored
|
||||||
|
uid=4_29 ignored
|
||||||
|
uid=4_30 ignored
|
||||||
|
uid=4_31 ignored
|
||||||
|
uid=4_32 ignored
|
||||||
|
uid=4_33 ignored
|
||||||
|
uid=4_34 ignored
|
||||||
|
uid=4_35 ignored
|
||||||
|
uid=4_36 ignored
|
||||||
|
uid=4_37 ignored
|
||||||
|
uid=4_38 ignored
|
||||||
|
uid=4_39 ignored
|
||||||
|
uid=4_40 ignored
|
||||||
|
uid=4_41 ignored
|
||||||
|
uid=4_42 generic
|
||||||
|
uid=4_43 generic
|
||||||
|
uid=4_44 generic
|
||||||
|
uid=4_45 generic
|
||||||
|
uid=4_46 list
|
||||||
|
uid=4_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=4_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=4_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=4_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=4_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=4_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=4_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=4_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=4_55 list
|
||||||
|
uid=4_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=4_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=4_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=4_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=4_60 generic
|
||||||
|
uid=20_0 ignored
|
||||||
|
uid=20_1 ignored
|
||||||
|
uid=20_2 generic
|
||||||
|
uid=20_3 list
|
||||||
|
uid=20_4 listitem level="1"
|
||||||
|
uid=20_5 ignored
|
||||||
|
uid=20_6 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=20_7 generic
|
||||||
|
uid=20_8 generic
|
||||||
|
uid=20_9 LabelText
|
||||||
|
uid=20_10 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=20_11 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=20_12 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=20_13 generic
|
||||||
|
uid=20_14 LabelText
|
||||||
|
uid=20_15 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=20_16 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=20_17 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=20_18 button
|
||||||
|
uid=4_73 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=4_74 generic "Développer la navigation"
|
||||||
|
uid=4_75 ignored
|
||||||
|
uid=4_76 list
|
||||||
|
uid=4_77 listitem level="1"
|
||||||
|
uid=4_78 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=4_79 list
|
||||||
|
uid=4_80 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=4_81 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=4_82 list
|
||||||
|
uid=4_83 ignored
|
||||||
|
uid=4_84 ignored
|
||||||
|
uid=4_85 generic
|
||||||
|
uid=4_86 sectionheader
|
||||||
|
uid=4_87 generic
|
||||||
|
uid=4_88 generic
|
||||||
|
uid=4_89 LabelText
|
||||||
|
uid=4_90 LabelText
|
||||||
|
uid=4_91 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=4_92 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=4_93 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=4_94 ignored
|
||||||
|
uid=4_95 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=4_96 ignored
|
||||||
|
uid=4_97 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=4_98 ignored
|
||||||
|
uid=4_99 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=4_100 ignored
|
||||||
|
uid=4_101 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=4_102 ignored
|
||||||
|
uid=4_103 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=4_104 ignored
|
||||||
|
uid=4_105 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=4_106 ignored
|
||||||
|
uid=4_107 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=4_108 ignored
|
||||||
|
uid=4_109 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=4_110 ignored
|
||||||
|
uid=4_111 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=4_112 ignored
|
||||||
|
uid=4_113 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=4_114 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=4_115 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=4_116 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=4_117 generic
|
||||||
|
uid=4_118 generic
|
||||||
|
uid=4_119 generic
|
||||||
|
uid=4_120 ignored
|
||||||
|
uid=4_121 list
|
||||||
|
uid=4_122 generic "Tchat"
|
||||||
|
uid=4_123 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=4_124 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=4_125 generic
|
||||||
|
uid=4_126 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=4_127 generic
|
||||||
|
uid=4_128 tablist orientation="horizontal"
|
||||||
|
uid=4_129 list
|
||||||
|
uid=4_130 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=4_131 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=4_132 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=4_133 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=4_134 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=4_135 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=4_136 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=4_137 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=4_138 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=4_139 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=4_140 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=4_141 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=4_142 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=4_143 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=4_144 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=4_145 generic
|
||||||
|
uid=4_175 ignored
|
||||||
|
uid=4_176 ignored
|
||||||
|
uid=1_258 ignored
|
||||||
|
uid=1_259 ignored
|
||||||
|
uid=4_177 ignored
|
||||||
|
uid=4_178 ignored
|
||||||
|
uid=1_262 ignored
|
||||||
|
uid=4_299 ignored
|
||||||
|
uid=4_300 ignored
|
||||||
|
uid=1_447 ignored
|
||||||
|
uid=1_448 ignored
|
||||||
|
uid=4_301 ignored
|
||||||
|
uid=4_302 ignored
|
||||||
|
uid=1_451 ignored
|
||||||
|
uid=4_366 ignored
|
||||||
|
uid=4_367 ignored
|
||||||
|
uid=1_555 ignored
|
||||||
|
uid=1_556 ignored
|
||||||
|
uid=4_368 ignored
|
||||||
|
uid=4_369 ignored
|
||||||
|
uid=1_559 ignored
|
||||||
|
uid=4_444 ignored
|
||||||
|
uid=4_445 ignored
|
||||||
|
uid=1_674 ignored
|
||||||
|
uid=1_675 ignored
|
||||||
|
uid=4_446 ignored
|
||||||
|
uid=4_447 ignored
|
||||||
|
uid=1_678 ignored
|
||||||
|
uid=4_454 ignored
|
||||||
|
uid=4_455 ignored
|
||||||
|
uid=4_456 ignored
|
||||||
|
uid=4_457 ignored
|
||||||
|
uid=4_458 ignored
|
||||||
|
uid=4_459 ignored
|
||||||
|
uid=4_460 ignored
|
||||||
|
uid=4_461 ignored
|
||||||
|
uid=4_462 ignored
|
||||||
|
uid=4_463 ignored
|
||||||
|
uid=4_464 ignored
|
||||||
|
uid=4_465 ignored
|
||||||
|
uid=4_466 ignored
|
||||||
|
uid=4_467 ignored
|
||||||
|
uid=4_468 ignored
|
||||||
|
uid=4_469 ignored
|
||||||
|
uid=4_470 ignored
|
||||||
|
uid=4_471 ignored
|
||||||
|
uid=4_472 ignored
|
||||||
|
uid=4_473 ignored
|
||||||
|
uid=4_474 ignored
|
||||||
|
uid=4_475 ignored
|
||||||
|
uid=4_476 ignored
|
||||||
|
uid=4_477 ignored
|
||||||
|
uid=4_478 ignored
|
||||||
|
uid=4_479 ignored
|
||||||
|
uid=4_480 ignored
|
||||||
|
uid=4_481 ignored
|
||||||
|
uid=4_482 ignored
|
||||||
|
uid=4_483 ignored
|
||||||
|
uid=4_484 ignored
|
||||||
|
uid=4_485 ignored
|
||||||
|
uid=4_486 ignored
|
||||||
|
uid=4_487 ignored
|
||||||
|
uid=4_488 ignored
|
||||||
|
uid=4_489 ignored
|
||||||
|
uid=4_490 ignored
|
||||||
|
uid=9_1 generic
|
||||||
|
uid=9_2 generic
|
||||||
|
uid=9_3 heading "Foundry Virtual Tabletop" level="1"
|
||||||
|
uid=9_4 StaticText "Foundry Virtual Tabletop"
|
||||||
|
uid=1_81 InlineTextBox "Foundry Virtual Tabletop"
|
||||||
|
uid=9_5 paragraph
|
||||||
|
uid=9_6 StaticText "Version 14 Stable"
|
||||||
|
uid=1_81 InlineTextBox "Version 14 Stable"
|
||||||
|
uid=9_7 ignored
|
||||||
|
uid=9_8 ignored
|
||||||
|
uid=9_9 StaticText "Version"
|
||||||
|
uid=1_81 InlineTextBox "Version"
|
||||||
|
uid=9_10 ignored
|
||||||
|
uid=9_11 StaticText "363"
|
||||||
|
uid=1_81 InlineTextBox "363"
|
||||||
|
uid=9_12 ignored
|
||||||
|
uid=9_13 ignored
|
||||||
|
uid=9_14 StaticText "Donjon & Cie"
|
||||||
|
uid=1_81 InlineTextBox "Donjon & Cie"
|
||||||
|
uid=9_15 ignored
|
||||||
|
uid=9_16 StaticText "14.0.0"
|
||||||
|
uid=1_81 InlineTextBox "14.0.0"
|
||||||
|
uid=9_17 ignored
|
||||||
|
uid=9_18 ignored
|
||||||
|
uid=9_19 StaticText "Modules actifs"
|
||||||
|
uid=1_81 InlineTextBox "Modules actifs"
|
||||||
|
uid=9_20 ignored
|
||||||
|
uid=9_21 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=9_22 generic
|
||||||
|
uid=9_23 heading "Paramètres et configuration" level="4"
|
||||||
|
uid=9_24 StaticText "Paramètres et configuration"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres et configuration"
|
||||||
|
uid=9_25 button "Paramètres de la partie"
|
||||||
|
uid=9_26 ignored
|
||||||
|
uid=9_27 StaticText "Paramètres de la partie"
|
||||||
|
uid=1_81 InlineTextBox "Paramètres de la partie"
|
||||||
|
uid=9_28 button "Configuration des contrôles"
|
||||||
|
uid=9_29 ignored
|
||||||
|
uid=9_30 StaticText "Configuration des contrôles"
|
||||||
|
uid=1_81 InlineTextBox "Configuration des contrôles"
|
||||||
|
uid=9_31 button "Gestion des modules"
|
||||||
|
uid=9_32 ignored
|
||||||
|
uid=9_33 StaticText "Gestion des modules"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des modules"
|
||||||
|
uid=9_34 button "Configuration du monde"
|
||||||
|
uid=9_35 ignored
|
||||||
|
uid=9_36 StaticText "Configuration du monde"
|
||||||
|
uid=1_81 InlineTextBox "Configuration du monde"
|
||||||
|
uid=9_37 button "Gestion des utilisateurs"
|
||||||
|
uid=9_38 ignored
|
||||||
|
uid=9_39 StaticText "Gestion des utilisateurs"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des utilisateurs"
|
||||||
|
uid=9_40 button "Gestion des présentations"
|
||||||
|
uid=9_41 ignored
|
||||||
|
uid=9_42 StaticText "Gestion des présentations"
|
||||||
|
uid=1_81 InlineTextBox "Gestion des présentations"
|
||||||
|
uid=9_43 generic
|
||||||
|
uid=9_44 heading "Aide et documentation" level="4"
|
||||||
|
uid=9_45 StaticText "Aide et documentation"
|
||||||
|
uid=1_81 InlineTextBox "Aide et documentation"
|
||||||
|
uid=9_46 button "Support & problèmes (1)"
|
||||||
|
uid=9_47 ignored
|
||||||
|
uid=9_48 StaticText "Support & problèmes (1)"
|
||||||
|
uid=1_81 InlineTextBox "Support & problèmes (1)"
|
||||||
|
uid=9_49 link "Documentation" url="https://foundryvtt.com/kb/"
|
||||||
|
uid=9_50 ignored
|
||||||
|
uid=9_51 StaticText "Documentation"
|
||||||
|
uid=1_81 InlineTextBox "Documentation"
|
||||||
|
uid=9_52 link "Wiki de la communauté" url="https://foundryvtt.wiki/"
|
||||||
|
uid=9_53 ignored
|
||||||
|
uid=9_54 StaticText "Wiki de la communauté"
|
||||||
|
uid=1_81 InlineTextBox "Wiki de la communauté"
|
||||||
|
uid=9_55 generic
|
||||||
|
uid=9_56 heading "Accès à la partie" level="4"
|
||||||
|
uid=9_57 StaticText "Accès à la partie"
|
||||||
|
uid=1_81 InlineTextBox "Accès à la partie"
|
||||||
|
uid=9_58 button "Liens d’invitation"
|
||||||
|
uid=9_59 ignored
|
||||||
|
uid=9_60 StaticText "Liens d’invitation"
|
||||||
|
uid=1_81 InlineTextBox "Liens d’invitation"
|
||||||
|
uid=9_61 button "Déconnexion"
|
||||||
|
uid=9_62 ignored
|
||||||
|
uid=9_63 StaticText "Déconnexion"
|
||||||
|
uid=1_81 InlineTextBox "Déconnexion"
|
||||||
|
uid=9_64 button "Retour à l’accueil"
|
||||||
|
uid=9_65 ignored
|
||||||
|
uid=9_66 StaticText "Retour à l’accueil"
|
||||||
|
uid=1_81 InlineTextBox "Retour à l’accueil"
|
||||||
|
uid=4_491 generic
|
||||||
|
uid=4_492 generic
|
||||||
|
uid=4_493 generic
|
||||||
|
uid=4_494 Canvas
|
||||||
|
uid=4_498 generic
|
||||||
|
uid=4_499 ignored
|
||||||
|
uid=4_647 ignored
|
||||||
|
uid=16_38 ignored
|
||||||
|
uid=20_19 generic
|
||||||
|
uid=20_20 generic
|
||||||
|
uid=20_21 generic
|
||||||
|
uid=20_22 ignored
|
||||||
|
uid=20_23 button "Fermer"
|
||||||
|
uid=20_24 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=20_25 list "Tableau du Réalisateur"
|
||||||
|
uid=20_26 listitem "Gamemaster" level="1"
|
||||||
|
uid=20_27 generic
|
||||||
|
uid=20_28 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=20_29 paragraph
|
||||||
|
uid=20_30 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=20_31 button "Hide Gamemaster"
|
||||||
|
uid=20_32 ignored
|
||||||
|
uid=20_33 listitem "Player2" level="1"
|
||||||
|
uid=20_34 generic
|
||||||
|
uid=20_35 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=20_36 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=20_37 ignored
|
||||||
|
uid=20_38 paragraph
|
||||||
|
uid=20_39 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=20_40 button "Hide Player2"
|
||||||
|
uid=20_41 ignored
|
||||||
|
uid=20_42 listitem "Player3" level="1"
|
||||||
|
uid=20_43 generic
|
||||||
|
uid=20_44 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=20_45 paragraph
|
||||||
|
uid=20_46 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=20_47 button "Hide Player3"
|
||||||
|
uid=20_48 ignored
|
||||||
|
uid=20_49 ignored
|
||||||
|
uid=20_50 ignored
|
||||||
|
uid=20_51 ignored
|
||||||
|
uid=20_52 ignored
|
||||||
|
uid=20_53 ignored
|
||||||
|
uid=20_54 ignored
|
||||||
|
uid=20_55 ignored
|
||||||
|
uid=20_56 ignored
|
||||||
|
uid=20_57 ignored
|
||||||
|
uid=20_58 ignored
|
||||||
|
uid=20_59 ignored
|
||||||
|
uid=20_60 ignored
|
||||||
|
uid=20_61 ignored
|
||||||
|
uid=20_62 ignored
|
||||||
|
uid=20_63 ignored
|
||||||
|
uid=20_64 button "Tout afficher"
|
||||||
|
uid=20_65 ignored
|
||||||
|
uid=20_66 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=20_67 button "Tout masquer"
|
||||||
|
uid=20_68 ignored
|
||||||
|
uid=20_69 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=20_70 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=20_71 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=20_72 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=20_73 ignored
|
||||||
|
uid=20_74 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=20_75 ignored
|
||||||
|
uid=20_76 button "S"
|
||||||
|
uid=20_77 ignored
|
||||||
|
uid=20_78 ignored
|
||||||
|
uid=20_79 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=20_80 button "L"
|
||||||
|
uid=20_81 ignored
|
||||||
|
uid=20_82 ignored
|
||||||
|
uid=20_83 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=20_84 button "S"
|
||||||
|
uid=20_85 ignored
|
||||||
|
uid=20_86 ignored
|
||||||
|
uid=20_87 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=20_88 button "L"
|
||||||
|
uid=20_89 ignored
|
||||||
|
uid=20_90 ignored
|
||||||
|
uid=20_91 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=20_92 button "S"
|
||||||
|
uid=20_93 ignored
|
||||||
|
uid=20_94 ignored
|
||||||
|
uid=20_95 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=20_96 button "L"
|
||||||
|
uid=20_97 ignored
|
||||||
|
uid=20_98 ignored
|
||||||
|
uid=20_99 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=20_100 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=20_101 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=20_102 ignored
|
||||||
|
uid=20_103 generic
|
||||||
|
uid=20_104 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=20_105 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=20_106 MenuListPopup
|
||||||
|
uid=20_107 option "60px" selectable value="60px"
|
||||||
|
uid=20_108 option "80px" selectable value="80px"
|
||||||
|
uid=20_109 option "100px" selectable selected value="100px"
|
||||||
|
uid=20_110 option "120px" selectable value="120px"
|
||||||
|
uid=20_111 option "150px" selectable value="150px"
|
||||||
|
uid=20_112 option "200px" selectable value="200px"
|
||||||
|
uid=20_113 generic
|
||||||
|
uid=20_114 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=20_115 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=20_116 MenuListPopup
|
||||||
|
uid=20_117 option "60px" selectable value="60px"
|
||||||
|
uid=20_118 option "80px" selectable value="80px"
|
||||||
|
uid=20_119 option "100px" selectable value="100px"
|
||||||
|
uid=20_120 option "120px" selectable value="120px"
|
||||||
|
uid=20_121 option "150px" selectable selected value="150px"
|
||||||
|
uid=20_122 option "200px" selectable value="200px"
|
||||||
|
uid=20_123 sectionfooter
|
||||||
|
uid=20_124 ignored
|
||||||
|
uid=20_125 button "Sauvegarder la disposition"
|
||||||
|
uid=20_126 ignored
|
||||||
|
uid=20_127 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=20_128 button "Charger la disposition" disableable disabled
|
||||||
|
uid=20_129 ignored
|
||||||
|
uid=20_130 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=20_131 button "Exporter"
|
||||||
|
uid=20_132 ignored
|
||||||
|
uid=20_133 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=20_134 button "Importer"
|
||||||
|
uid=20_135 ignored
|
||||||
|
uid=20_136 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=20_137 ignored
|
||||||
|
uid=20_138 button "Application auto..."
|
||||||
|
uid=20_139 ignored
|
||||||
|
uid=20_140 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=20_141 button "Désactiver A/V"
|
||||||
|
uid=20_142 ignored
|
||||||
|
uid=20_143 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=20_144 button "Paramètres A/V..."
|
||||||
|
uid=20_145 ignored
|
||||||
|
uid=20_146 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=20_147 generic
|
||||||
|
uid=20_148 generic
|
||||||
|
uid=20_149 generic
|
||||||
|
uid=20_150 complementary "Scrying Pool"
|
||||||
|
uid=20_151 ignored
|
||||||
|
uid=20_152 button "Close Scrying Pool"
|
||||||
|
uid=20_153 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=20_154 ignored
|
||||||
|
uid=20_155 button "Expand Scrying Pool" expandable
|
||||||
|
uid=20_156 generic
|
||||||
|
uid=20_157 button "Open Director's Board"
|
||||||
|
uid=20_158 ignored
|
||||||
|
uid=20_159 ignored
|
||||||
|
uid=20_160 StaticText "Director's Board"
|
||||||
|
uid=1_81 InlineTextBox "Director's Board"
|
||||||
|
uid=20_161 list
|
||||||
|
uid=20_162 listitem level="1"
|
||||||
|
uid=20_163 button "Gamemaster — Active"
|
||||||
|
uid=20_164 ignored
|
||||||
|
uid=20_165 ignored
|
||||||
|
uid=20_166 ignored
|
||||||
|
uid=20_167 ignored
|
||||||
|
uid=20_168 ignored
|
||||||
|
uid=20_169 ignored
|
||||||
|
uid=20_170 ignored
|
||||||
|
uid=20_171 ignored
|
||||||
|
uid=20_172 ignored
|
||||||
|
uid=20_173 ignored
|
||||||
|
uid=20_174 ignored
|
||||||
|
uid=20_175 ignored
|
||||||
|
uid=20_176 ignored
|
||||||
|
uid=20_177 ignored
|
||||||
|
uid=20_178 ignored
|
||||||
|
uid=20_179 ignored
|
||||||
|
uid=20_180 ignored
|
||||||
|
uid=20_181 ignored
|
||||||
|
uid=20_182 ignored
|
||||||
|
uid=20_183 ignored
|
||||||
|
uid=20_184 ignored
|
||||||
|
uid=20_185 ignored
|
||||||
|
uid=20_186 ignored
|
||||||
|
uid=20_187 ignored
|
||||||
|
uid=20_188 ignored
|
||||||
|
uid=20_189 ignored
|
||||||
|
uid=20_190 ignored
|
||||||
|
uid=20_191 ignored
|
||||||
|
uid=20_192 ignored
|
||||||
|
uid=20_193 ignored
|
||||||
|
uid=20_194 ignored
|
||||||
|
uid=20_195 ignored
|
||||||
|
uid=20_196 ignored
|
||||||
|
uid=20_197 ignored
|
||||||
|
uid=20_198 ignored
|
||||||
|
uid=20_199 ignored
|
||||||
|
uid=20_200 listitem level="1"
|
||||||
|
uid=20_201 button "Player2 — Active"
|
||||||
|
uid=20_202 listitem level="1"
|
||||||
|
uid=20_203 button "Player3 — Active"
|
||||||
@@ -0,0 +1,556 @@
|
|||||||
|
uid=1_0 RootWebArea "Foundry Virtual Tabletop" url="https://localhost:31000/game"
|
||||||
|
uid=26_0 ignored
|
||||||
|
uid=26_1 generic
|
||||||
|
uid=26_2 list
|
||||||
|
uid=26_3 ignored
|
||||||
|
uid=26_4 ignored
|
||||||
|
uid=26_5 ignored
|
||||||
|
uid=26_6 ignored
|
||||||
|
uid=26_7 ignored
|
||||||
|
uid=26_8 ignored
|
||||||
|
uid=26_9 ignored
|
||||||
|
uid=26_10 ignored
|
||||||
|
uid=26_11 ignored
|
||||||
|
uid=26_12 ignored
|
||||||
|
uid=26_13 ignored
|
||||||
|
uid=26_14 ignored
|
||||||
|
uid=26_15 ignored
|
||||||
|
uid=26_16 ignored
|
||||||
|
uid=26_17 ignored
|
||||||
|
uid=26_18 ignored
|
||||||
|
uid=26_19 ignored
|
||||||
|
uid=26_20 ignored
|
||||||
|
uid=26_21 ignored
|
||||||
|
uid=26_22 ignored
|
||||||
|
uid=26_23 ignored
|
||||||
|
uid=26_24 ignored
|
||||||
|
uid=26_25 ignored
|
||||||
|
uid=26_26 ignored
|
||||||
|
uid=26_27 ignored
|
||||||
|
uid=26_28 ignored
|
||||||
|
uid=26_29 ignored
|
||||||
|
uid=26_30 ignored
|
||||||
|
uid=26_31 ignored
|
||||||
|
uid=26_32 ignored
|
||||||
|
uid=26_33 ignored
|
||||||
|
uid=26_34 ignored
|
||||||
|
uid=26_35 ignored
|
||||||
|
uid=26_36 ignored
|
||||||
|
uid=26_37 ignored
|
||||||
|
uid=26_38 ignored
|
||||||
|
uid=26_39 ignored
|
||||||
|
uid=26_40 ignored
|
||||||
|
uid=26_41 ignored
|
||||||
|
uid=26_42 generic
|
||||||
|
uid=26_43 generic
|
||||||
|
uid=26_44 generic
|
||||||
|
uid=26_45 generic
|
||||||
|
uid=26_46 list
|
||||||
|
uid=26_47 listitem level="1"
|
||||||
|
uid=1_49 tab "Outils de token" selectable
|
||||||
|
uid=26_48 listitem level="1"
|
||||||
|
uid=1_51 tab "Outils de tuile" selectable
|
||||||
|
uid=26_49 listitem level="1"
|
||||||
|
uid=1_53 tab "Outils de dessin" selectable
|
||||||
|
uid=26_50 listitem level="1"
|
||||||
|
uid=1_55 tab "Outils de mur" selectable
|
||||||
|
uid=26_51 listitem level="1"
|
||||||
|
uid=1_57 tab "Outils de lumière" selectable
|
||||||
|
uid=26_52 listitem level="1"
|
||||||
|
uid=1_59 tab "Outils de son d’ambiance" selectable
|
||||||
|
uid=26_53 listitem level="1"
|
||||||
|
uid=1_61 tab "Outils de région" selectable
|
||||||
|
uid=26_54 listitem level="1"
|
||||||
|
uid=1_63 tab "Notes" selectable
|
||||||
|
uid=26_55 list
|
||||||
|
uid=26_56 listitem level="1"
|
||||||
|
uid=1_66 button "Sélection de tokens" pressed
|
||||||
|
uid=26_57 listitem level="1"
|
||||||
|
uid=1_68 button "Sélection de cibles"
|
||||||
|
uid=26_58 listitem level="1"
|
||||||
|
uid=1_70 button "Règle"
|
||||||
|
uid=26_59 listitem level="1"
|
||||||
|
uid=1_72 button "Déplacement sans contrainte"
|
||||||
|
uid=26_60 generic
|
||||||
|
uid=26_61 ignored
|
||||||
|
uid=26_62 ignored
|
||||||
|
uid=26_63 generic
|
||||||
|
uid=26_64 list
|
||||||
|
uid=26_65 listitem level="1"
|
||||||
|
uid=26_66 ignored
|
||||||
|
uid=26_67 StaticText "Gamemaster [MJ]"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster [MJ]"
|
||||||
|
uid=26_68 generic
|
||||||
|
uid=26_69 generic
|
||||||
|
uid=26_70 LabelText
|
||||||
|
uid=26_71 StaticText "Latence"
|
||||||
|
uid=1_81 InlineTextBox "Latence"
|
||||||
|
uid=26_72 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=26_73 StaticText "1ms"
|
||||||
|
uid=1_81 InlineTextBox "1ms"
|
||||||
|
uid=26_74 generic
|
||||||
|
uid=26_75 LabelText
|
||||||
|
uid=26_76 StaticText "IPS"
|
||||||
|
uid=1_81 InlineTextBox "IPS"
|
||||||
|
uid=26_77 StaticText " "
|
||||||
|
uid=1_81 InlineTextBox " "
|
||||||
|
uid=26_78 StaticText "30"
|
||||||
|
uid=1_81 InlineTextBox "30"
|
||||||
|
uid=26_79 button
|
||||||
|
uid=26_80 generic
|
||||||
|
uid=1_95 navigation
|
||||||
|
uid=26_81 generic "Développer la navigation"
|
||||||
|
uid=26_82 ignored
|
||||||
|
uid=26_83 list
|
||||||
|
uid=26_84 listitem level="1"
|
||||||
|
uid=26_85 ignored
|
||||||
|
uid=1_101 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=26_86 list
|
||||||
|
uid=26_87 listitem "Gamemaster" level="2"
|
||||||
|
uid=1_104 StaticText "G"
|
||||||
|
uid=1_81 InlineTextBox "G"
|
||||||
|
uid=26_88 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText ""
|
||||||
|
uid=1_81 InlineTextBox ""
|
||||||
|
uid=26_89 list
|
||||||
|
uid=26_90 ignored
|
||||||
|
uid=26_91 ignored
|
||||||
|
uid=26_92 generic
|
||||||
|
uid=26_93 sectionheader
|
||||||
|
uid=26_94 generic
|
||||||
|
uid=26_95 generic
|
||||||
|
uid=26_96 LabelText
|
||||||
|
uid=26_97 LabelText
|
||||||
|
uid=26_98 sectionfooter
|
||||||
|
uid=1_116 generic roledescription="Barre de raccourcis"
|
||||||
|
uid=26_99 generic
|
||||||
|
uid=1_118 button "Couper le son"
|
||||||
|
uid=1_119 button "Menu principal"
|
||||||
|
uid=26_100 list
|
||||||
|
uid=1_121 button "Emplacement vide"
|
||||||
|
uid=26_101 ignored
|
||||||
|
uid=26_102 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_124 button "Emplacement vide"
|
||||||
|
uid=26_103 ignored
|
||||||
|
uid=26_104 StaticText "2"
|
||||||
|
uid=1_81 InlineTextBox "2"
|
||||||
|
uid=1_127 button "Emplacement vide"
|
||||||
|
uid=26_105 ignored
|
||||||
|
uid=26_106 StaticText "3"
|
||||||
|
uid=1_81 InlineTextBox "3"
|
||||||
|
uid=1_130 button "Emplacement vide"
|
||||||
|
uid=26_107 ignored
|
||||||
|
uid=26_108 StaticText "4"
|
||||||
|
uid=1_81 InlineTextBox "4"
|
||||||
|
uid=1_133 button "Emplacement vide"
|
||||||
|
uid=26_109 ignored
|
||||||
|
uid=26_110 StaticText "5"
|
||||||
|
uid=1_81 InlineTextBox "5"
|
||||||
|
uid=1_136 button "Emplacement vide"
|
||||||
|
uid=26_111 ignored
|
||||||
|
uid=26_112 StaticText "6"
|
||||||
|
uid=1_81 InlineTextBox "6"
|
||||||
|
uid=1_139 button "Emplacement vide"
|
||||||
|
uid=26_113 ignored
|
||||||
|
uid=26_114 StaticText "7"
|
||||||
|
uid=1_81 InlineTextBox "7"
|
||||||
|
uid=1_142 button "Emplacement vide"
|
||||||
|
uid=26_115 ignored
|
||||||
|
uid=26_116 StaticText "8"
|
||||||
|
uid=1_81 InlineTextBox "8"
|
||||||
|
uid=1_145 button "Emplacement vide"
|
||||||
|
uid=26_117 ignored
|
||||||
|
uid=26_118 StaticText "9"
|
||||||
|
uid=1_81 InlineTextBox "9"
|
||||||
|
uid=1_148 button "Emplacement vide"
|
||||||
|
uid=26_119 ignored
|
||||||
|
uid=26_120 StaticText "0"
|
||||||
|
uid=1_81 InlineTextBox "0"
|
||||||
|
uid=26_121 generic
|
||||||
|
uid=1_152 navigation
|
||||||
|
uid=1_153 button "Page suivante"
|
||||||
|
uid=26_122 ignored
|
||||||
|
uid=1_155 StaticText "1"
|
||||||
|
uid=1_81 InlineTextBox "1"
|
||||||
|
uid=1_156 button "Page précédente"
|
||||||
|
uid=26_123 ignored
|
||||||
|
uid=1_158 button "Verrouiller la barre de raccourcis"
|
||||||
|
uid=1_159 button "Effacer la barre de raccourcis"
|
||||||
|
uid=26_124 generic
|
||||||
|
uid=26_125 generic
|
||||||
|
uid=26_126 generic
|
||||||
|
uid=26_127 ignored
|
||||||
|
uid=26_128 list
|
||||||
|
uid=26_129 generic "Tchat"
|
||||||
|
uid=26_130 generic
|
||||||
|
uid=1_167 generic value="
|
||||||
|
"
|
||||||
|
uid=1_168 paragraph
|
||||||
|
uid=1_169 LineBreak "
|
||||||
|
"
|
||||||
|
uid=1_81 InlineTextBox "
|
||||||
|
"
|
||||||
|
uid=26_131 ignored
|
||||||
|
uid=1_81 generic
|
||||||
|
uid=1_81 StaticText "Entrer un message"
|
||||||
|
uid=1_81 InlineTextBox "Entrer un message"
|
||||||
|
uid=26_132 generic
|
||||||
|
uid=26_133 generic
|
||||||
|
uid=1_173 button "Public en tant qu'utilisateur" pressed
|
||||||
|
uid=1_174 button "Privé pour les maîtres de jeu"
|
||||||
|
uid=1_175 button "Aveugle pour les maîtres de jeu"
|
||||||
|
uid=1_176 button "Seulement pour soi-même"
|
||||||
|
uid=1_177 button "Public en tant que personnage"
|
||||||
|
uid=26_134 generic
|
||||||
|
uid=26_135 tablist orientation="horizontal"
|
||||||
|
uid=26_136 list
|
||||||
|
uid=26_137 listitem level="1"
|
||||||
|
uid=1_182 tab "Messages du tchat" selectable
|
||||||
|
uid=26_138 listitem level="1"
|
||||||
|
uid=1_184 tab "Rencontres de combat" selectable
|
||||||
|
uid=26_139 listitem level="1"
|
||||||
|
uid=1_186 tab "Scènes" selectable
|
||||||
|
uid=26_140 listitem level="1"
|
||||||
|
uid=1_188 tab "Objets plaçables" selectable
|
||||||
|
uid=26_141 listitem level="1"
|
||||||
|
uid=1_190 tab "Acteurs" selectable
|
||||||
|
uid=26_142 listitem level="1"
|
||||||
|
uid=1_192 tab "Objets" selectable
|
||||||
|
uid=26_143 listitem level="1"
|
||||||
|
uid=1_194 tab "Journaux" selectable
|
||||||
|
uid=26_144 listitem level="1"
|
||||||
|
uid=1_196 tab "Tables aléatoires" selectable
|
||||||
|
uid=26_145 listitem level="1"
|
||||||
|
uid=1_198 tab "Jeux de cartes" selectable
|
||||||
|
uid=26_146 listitem level="1"
|
||||||
|
uid=1_200 tab "Macros" selectable
|
||||||
|
uid=26_147 listitem level="1"
|
||||||
|
uid=1_202 tab "Playlists" selectable
|
||||||
|
uid=26_148 listitem level="1"
|
||||||
|
uid=1_204 tab "Compendiums" selectable
|
||||||
|
uid=26_149 listitem level="1"
|
||||||
|
uid=1_206 tab "Dice So Nice" selectable
|
||||||
|
uid=26_150 listitem level="1"
|
||||||
|
uid=1_208 tab "Paramètres" selectable
|
||||||
|
uid=26_151 listitem level="1"
|
||||||
|
uid=1_210 button "Réduire"
|
||||||
|
uid=26_152 generic
|
||||||
|
uid=26_153 ignored
|
||||||
|
uid=26_154 ignored
|
||||||
|
uid=26_155 ignored
|
||||||
|
uid=26_156 ignored
|
||||||
|
uid=26_157 ignored
|
||||||
|
uid=26_158 ignored
|
||||||
|
uid=26_159 ignored
|
||||||
|
uid=26_160 ignored
|
||||||
|
uid=26_161 ignored
|
||||||
|
uid=26_162 ignored
|
||||||
|
uid=26_163 ignored
|
||||||
|
uid=26_164 ignored
|
||||||
|
uid=26_165 ignored
|
||||||
|
uid=26_166 ignored
|
||||||
|
uid=26_167 ignored
|
||||||
|
uid=26_168 ignored
|
||||||
|
uid=26_169 ignored
|
||||||
|
uid=26_170 ignored
|
||||||
|
uid=26_171 ignored
|
||||||
|
uid=26_172 ignored
|
||||||
|
uid=26_173 ignored
|
||||||
|
uid=26_174 ignored
|
||||||
|
uid=26_175 ignored
|
||||||
|
uid=26_176 ignored
|
||||||
|
uid=26_177 ignored
|
||||||
|
uid=26_178 ignored
|
||||||
|
uid=26_179 ignored
|
||||||
|
uid=26_180 ignored
|
||||||
|
uid=26_181 ignored
|
||||||
|
uid=26_182 ignored
|
||||||
|
uid=26_183 generic
|
||||||
|
uid=26_184 sectionheader
|
||||||
|
uid=26_185 ignored
|
||||||
|
uid=22_2 button "Créer une scène"
|
||||||
|
uid=26_186 ignored
|
||||||
|
uid=26_187 ignored
|
||||||
|
uid=26_188 StaticText "Créer une scène"
|
||||||
|
uid=1_81 InlineTextBox "Créer une scène"
|
||||||
|
uid=22_3 button "Créer un dossier"
|
||||||
|
uid=26_189 ignored
|
||||||
|
uid=26_190 ignored
|
||||||
|
uid=26_191 StaticText "Créer un dossier"
|
||||||
|
uid=1_81 InlineTextBox "Créer un dossier"
|
||||||
|
uid=22_4 search
|
||||||
|
uid=22_5 button "Recherche par nom uniquement"
|
||||||
|
uid=22_6 searchbox "Chercher dans les Scènes"
|
||||||
|
uid=26_192 ignored
|
||||||
|
uid=26_193 ignored
|
||||||
|
uid=26_194 generic
|
||||||
|
uid=22_7 button "Trier par ordre alphabétique"
|
||||||
|
uid=22_8 button "Réduire tous les dossiers"
|
||||||
|
uid=26_195 list
|
||||||
|
uid=26_196 listitem level="1"
|
||||||
|
uid=22_9 image "QA Damage Scene" url="https://localhost:31000/worlds/donjon-and-cie/assets/scenes/thumb-4xIQfUVf79BjHXUW_cf8Sg.webp"
|
||||||
|
uid=26_197 generic
|
||||||
|
uid=22_10 StaticText "QA Damage Scene"
|
||||||
|
uid=1_81 InlineTextBox "QA Damage Scene"
|
||||||
|
uid=26_198 listitem level="1"
|
||||||
|
uid=22_11 image "Scène" url="https://localhost:31000/worlds/donjon-and-cie/assets/scenes/thumb-nFrkZVHAR3SgvCv8RhSyCg.webp"
|
||||||
|
uid=26_199 generic
|
||||||
|
uid=22_12 StaticText "Scène"
|
||||||
|
uid=1_81 InlineTextBox "Scène"
|
||||||
|
uid=26_200 sectionfooter
|
||||||
|
uid=26_201 ignored
|
||||||
|
uid=26_202 ignored
|
||||||
|
uid=26_203 ignored
|
||||||
|
uid=26_204 ignored
|
||||||
|
uid=26_205 ignored
|
||||||
|
uid=26_206 ignored
|
||||||
|
uid=26_207 ignored
|
||||||
|
uid=26_208 ignored
|
||||||
|
uid=26_209 ignored
|
||||||
|
uid=26_210 ignored
|
||||||
|
uid=26_211 ignored
|
||||||
|
uid=26_212 ignored
|
||||||
|
uid=26_213 ignored
|
||||||
|
uid=26_214 ignored
|
||||||
|
uid=26_215 ignored
|
||||||
|
uid=26_216 ignored
|
||||||
|
uid=26_217 ignored
|
||||||
|
uid=26_218 ignored
|
||||||
|
uid=26_219 ignored
|
||||||
|
uid=26_220 ignored
|
||||||
|
uid=26_221 ignored
|
||||||
|
uid=26_222 ignored
|
||||||
|
uid=26_223 ignored
|
||||||
|
uid=26_224 ignored
|
||||||
|
uid=26_225 ignored
|
||||||
|
uid=26_226 ignored
|
||||||
|
uid=26_227 ignored
|
||||||
|
uid=26_228 ignored
|
||||||
|
uid=26_229 ignored
|
||||||
|
uid=26_230 ignored
|
||||||
|
uid=26_231 ignored
|
||||||
|
uid=26_232 ignored
|
||||||
|
uid=26_233 ignored
|
||||||
|
uid=26_234 generic
|
||||||
|
uid=26_235 generic
|
||||||
|
uid=26_236 generic
|
||||||
|
uid=26_237 Canvas
|
||||||
|
uid=26_238 generic
|
||||||
|
uid=26_239 generic
|
||||||
|
uid=26_240 complementary "Scrying Pool"
|
||||||
|
uid=26_241 ignored
|
||||||
|
uid=26_242 button "Close Scrying Pool"
|
||||||
|
uid=26_243 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=26_244 ignored
|
||||||
|
uid=26_245 button "Expand Scrying Pool" expandable
|
||||||
|
uid=26_246 generic
|
||||||
|
uid=26_247 button "Open Director's Board"
|
||||||
|
uid=26_248 ignored
|
||||||
|
uid=26_249 ignored
|
||||||
|
uid=26_250 StaticText "Director's Board"
|
||||||
|
uid=1_81 InlineTextBox "Director's Board"
|
||||||
|
uid=26_251 list
|
||||||
|
uid=26_252 listitem level="1"
|
||||||
|
uid=26_253 button "Gamemaster — Active"
|
||||||
|
uid=26_254 ignored
|
||||||
|
uid=26_255 ignored
|
||||||
|
uid=26_256 ignored
|
||||||
|
uid=26_257 ignored
|
||||||
|
uid=26_258 ignored
|
||||||
|
uid=26_259 ignored
|
||||||
|
uid=26_260 ignored
|
||||||
|
uid=26_261 ignored
|
||||||
|
uid=26_262 ignored
|
||||||
|
uid=26_263 ignored
|
||||||
|
uid=26_264 ignored
|
||||||
|
uid=26_265 ignored
|
||||||
|
uid=26_266 ignored
|
||||||
|
uid=26_267 ignored
|
||||||
|
uid=26_268 ignored
|
||||||
|
uid=26_269 ignored
|
||||||
|
uid=26_270 ignored
|
||||||
|
uid=26_271 ignored
|
||||||
|
uid=26_272 ignored
|
||||||
|
uid=26_273 ignored
|
||||||
|
uid=26_274 ignored
|
||||||
|
uid=26_275 ignored
|
||||||
|
uid=26_276 ignored
|
||||||
|
uid=26_277 ignored
|
||||||
|
uid=26_278 ignored
|
||||||
|
uid=26_279 ignored
|
||||||
|
uid=26_280 ignored
|
||||||
|
uid=26_281 ignored
|
||||||
|
uid=26_282 ignored
|
||||||
|
uid=26_283 ignored
|
||||||
|
uid=26_284 ignored
|
||||||
|
uid=26_285 ignored
|
||||||
|
uid=26_286 ignored
|
||||||
|
uid=26_287 ignored
|
||||||
|
uid=26_288 ignored
|
||||||
|
uid=26_289 ignored
|
||||||
|
uid=26_290 listitem level="1"
|
||||||
|
uid=26_291 button "Player2 — Active"
|
||||||
|
uid=26_292 listitem level="1"
|
||||||
|
uid=26_293 button "Player3 — Active"
|
||||||
|
uid=26_294 generic
|
||||||
|
uid=26_295 generic
|
||||||
|
uid=26_296 generic
|
||||||
|
uid=26_297 ignored
|
||||||
|
uid=21_15 button "Fermer"
|
||||||
|
uid=26_298 StaticText "×"
|
||||||
|
uid=1_81 InlineTextBox "×"
|
||||||
|
uid=26_299 list "Tableau du Réalisateur"
|
||||||
|
uid=21_16 listitem "Gamemaster" level="1"
|
||||||
|
uid=26_300 generic
|
||||||
|
uid=21_17 image "Avatar of Gamemaster" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=26_301 paragraph
|
||||||
|
uid=21_18 StaticText "Gamemaster"
|
||||||
|
uid=1_81 InlineTextBox "Gamemaster"
|
||||||
|
uid=21_19 button "Hide Gamemaster"
|
||||||
|
uid=26_302 ignored
|
||||||
|
uid=21_20 listitem "Player2" level="1"
|
||||||
|
uid=26_303 generic
|
||||||
|
uid=21_21 image "Avatar of Player2" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=21_22 status "Reaction Cam: Enabled" atomic description="Reaction Cam: Enabled" live="polite" relevant="additions text"
|
||||||
|
uid=26_304 ignored
|
||||||
|
uid=26_305 paragraph
|
||||||
|
uid=21_23 StaticText "Player2"
|
||||||
|
uid=1_81 InlineTextBox "Player2"
|
||||||
|
uid=21_24 button "Hide Player2"
|
||||||
|
uid=26_306 ignored
|
||||||
|
uid=21_25 listitem "Player3" level="1"
|
||||||
|
uid=26_307 generic
|
||||||
|
uid=21_26 image "Avatar of Player3" url="https://localhost:31000/icons/svg/mystery-man.svg"
|
||||||
|
uid=26_308 paragraph
|
||||||
|
uid=21_27 StaticText "Player3"
|
||||||
|
uid=1_81 InlineTextBox "Player3"
|
||||||
|
uid=21_28 button "Hide Player3"
|
||||||
|
uid=26_309 ignored
|
||||||
|
uid=26_310 ignored
|
||||||
|
uid=26_311 ignored
|
||||||
|
uid=26_312 ignored
|
||||||
|
uid=26_313 ignored
|
||||||
|
uid=26_314 ignored
|
||||||
|
uid=26_315 ignored
|
||||||
|
uid=26_316 ignored
|
||||||
|
uid=26_317 ignored
|
||||||
|
uid=26_318 ignored
|
||||||
|
uid=26_319 ignored
|
||||||
|
uid=26_320 ignored
|
||||||
|
uid=26_321 ignored
|
||||||
|
uid=26_322 ignored
|
||||||
|
uid=26_323 ignored
|
||||||
|
uid=26_324 ignored
|
||||||
|
uid=21_29 button "Tout afficher"
|
||||||
|
uid=26_325 ignored
|
||||||
|
uid=26_326 StaticText "Tout afficher"
|
||||||
|
uid=1_81 InlineTextBox "Tout afficher"
|
||||||
|
uid=21_30 button "Tout masquer"
|
||||||
|
uid=26_327 ignored
|
||||||
|
uid=26_328 StaticText "Tout masquer"
|
||||||
|
uid=1_81 InlineTextBox "Tout masquer"
|
||||||
|
uid=21_31 button "Ouvrir la référence des raccourcis"
|
||||||
|
uid=26_329 StaticText "?"
|
||||||
|
uid=1_81 InlineTextBox "?"
|
||||||
|
uid=26_330 toolbar "Disposition de la vue" orientation="horizontal"
|
||||||
|
uid=26_331 ignored
|
||||||
|
uid=21_32 StaticText "DISPOSITION DE LA VUE"
|
||||||
|
uid=1_81 InlineTextBox "DISPOSITION DE LA VUE"
|
||||||
|
uid=26_332 ignored
|
||||||
|
uid=21_33 button "S"
|
||||||
|
uid=26_333 ignored
|
||||||
|
uid=26_334 ignored
|
||||||
|
uid=26_335 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=21_34 button "L"
|
||||||
|
uid=26_336 ignored
|
||||||
|
uid=26_337 ignored
|
||||||
|
uid=26_338 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=21_35 button "S"
|
||||||
|
uid=26_339 ignored
|
||||||
|
uid=26_340 ignored
|
||||||
|
uid=26_341 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=21_36 button "L"
|
||||||
|
uid=26_342 ignored
|
||||||
|
uid=26_343 ignored
|
||||||
|
uid=26_344 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=21_37 button "S"
|
||||||
|
uid=26_345 ignored
|
||||||
|
uid=26_346 ignored
|
||||||
|
uid=26_347 StaticText "S"
|
||||||
|
uid=1_81 InlineTextBox "S"
|
||||||
|
uid=21_38 button "L"
|
||||||
|
uid=26_348 ignored
|
||||||
|
uid=26_349 ignored
|
||||||
|
uid=26_350 StaticText "L"
|
||||||
|
uid=1_81 InlineTextBox "L"
|
||||||
|
uid=26_351 toolbar "Largeurs des widgets vidéo" orientation="horizontal"
|
||||||
|
uid=21_39 StaticText "Largeurs des widgets vidéo"
|
||||||
|
uid=1_81 InlineTextBox "Largeurs des widgets vidéo"
|
||||||
|
uid=26_352 ignored
|
||||||
|
uid=26_353 generic
|
||||||
|
uid=21_40 StaticText "Petite :"
|
||||||
|
uid=1_81 InlineTextBox "Petite :"
|
||||||
|
uid=21_41 combobox expandable haspopup="menu" value="100px"
|
||||||
|
uid=26_354 MenuListPopup
|
||||||
|
uid=21_42 option "60px" selectable value="60px"
|
||||||
|
uid=21_43 option "80px" selectable value="80px"
|
||||||
|
uid=21_44 option "100px" selectable selected value="100px"
|
||||||
|
uid=21_45 option "120px" selectable value="120px"
|
||||||
|
uid=21_46 option "150px" selectable value="150px"
|
||||||
|
uid=21_47 option "200px" selectable value="200px"
|
||||||
|
uid=26_355 generic
|
||||||
|
uid=21_48 StaticText "Grande :"
|
||||||
|
uid=1_81 InlineTextBox "Grande :"
|
||||||
|
uid=21_49 combobox expandable haspopup="menu" value="150px"
|
||||||
|
uid=26_356 MenuListPopup
|
||||||
|
uid=21_50 option "60px" selectable value="60px"
|
||||||
|
uid=21_51 option "80px" selectable value="80px"
|
||||||
|
uid=21_52 option "100px" selectable value="100px"
|
||||||
|
uid=21_53 option "120px" selectable value="120px"
|
||||||
|
uid=21_54 option "150px" selectable selected value="150px"
|
||||||
|
uid=21_55 option "200px" selectable value="200px"
|
||||||
|
uid=26_357 sectionfooter
|
||||||
|
uid=26_358 ignored
|
||||||
|
uid=21_56 button "Sauvegarder la disposition"
|
||||||
|
uid=26_359 ignored
|
||||||
|
uid=26_360 StaticText "Sauvegarder la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Sauvegarder la disposition"
|
||||||
|
uid=21_57 button "Charger la disposition" disableable disabled
|
||||||
|
uid=26_361 ignored
|
||||||
|
uid=26_362 StaticText "Charger la disposition"
|
||||||
|
uid=1_81 InlineTextBox "Charger la disposition"
|
||||||
|
uid=21_58 button "Exporter"
|
||||||
|
uid=26_363 ignored
|
||||||
|
uid=26_364 StaticText "Exporter"
|
||||||
|
uid=1_81 InlineTextBox "Exporter"
|
||||||
|
uid=21_59 button "Importer"
|
||||||
|
uid=26_365 ignored
|
||||||
|
uid=26_366 StaticText "Importer"
|
||||||
|
uid=1_81 InlineTextBox "Importer"
|
||||||
|
uid=26_367 ignored
|
||||||
|
uid=21_60 button "Application auto..."
|
||||||
|
uid=26_368 ignored
|
||||||
|
uid=26_369 StaticText "Application auto..."
|
||||||
|
uid=1_81 InlineTextBox "Application auto..."
|
||||||
|
uid=21_61 button "Désactiver A/V"
|
||||||
|
uid=26_370 ignored
|
||||||
|
uid=26_371 StaticText "Désactiver A/V"
|
||||||
|
uid=1_81 InlineTextBox "Désactiver A/V"
|
||||||
|
uid=21_62 button "Paramètres A/V..."
|
||||||
|
uid=26_372 ignored
|
||||||
|
uid=26_373 StaticText "Paramètres A/V..."
|
||||||
|
uid=1_81 InlineTextBox "Paramètres A/V..."
|
||||||
|
uid=26_374 generic
|
||||||
|
uid=26_375 ignored
|
||||||
|
uid=26_376 ignored
|
||||||
|
uid=26_377 generic
|
||||||
|
uid=26_378 ignored
|
||||||
@@ -382,13 +382,48 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
// Defaults match the settings registration in module.js
|
// Defaults match the settings registration in module.js
|
||||||
const widgetWidthSm = this._adapter.settings?.get?.('widgetWidthSm') ?? '83';
|
const widgetWidthSm = this._adapter.settings?.get?.('widgetWidthSm') ?? '83';
|
||||||
const widgetWidthMd = this._adapter.settings?.get?.('widgetWidthMd') ?? '150';
|
const widgetWidthMd = this._adapter.settings?.get?.('widgetWidthMd') ?? '150';
|
||||||
const WIDTH_OPTIONS = [
|
const SM_WIDTH_OPTIONS = [
|
||||||
|
{ value: '60', label: '60px' },
|
||||||
|
{ value: '70', label: '70px' },
|
||||||
|
{ value: '80', label: '80px' },
|
||||||
|
{ value: '90', label: '90px' },
|
||||||
|
{ value: '100', label: '100px' },
|
||||||
|
{ value: '120', label: '120px' },
|
||||||
|
{ value: '140', label: '140px' },
|
||||||
|
{ value: '160', label: '160px' },
|
||||||
|
{ value: '180', label: '180px' },
|
||||||
|
{ value: '200', label: '200px' },
|
||||||
|
];
|
||||||
|
const MD_WIDTH_OPTIONS = [
|
||||||
{ value: '60', label: '60px' },
|
{ value: '60', label: '60px' },
|
||||||
{ value: '80', label: '80px' },
|
{ value: '80', label: '80px' },
|
||||||
{ value: '100', label: '100px' },
|
{ value: '100', label: '100px' },
|
||||||
{ value: '120', label: '120px' },
|
{ value: '120', label: '120px' },
|
||||||
{ value: '150', label: '150px' },
|
{ value: '150', label: '150px' },
|
||||||
{ value: '200', label: '200px' },
|
{ value: '200', label: '200px' },
|
||||||
|
{ value: '250', label: '250px' },
|
||||||
|
{ value: '300', label: '300px' },
|
||||||
|
{ value: '350', label: '350px' },
|
||||||
|
{ value: '400', label: '400px' },
|
||||||
|
];
|
||||||
|
|
||||||
|
// Tile shape selector
|
||||||
|
const currentTileShape = this._adapter.settings?.get?.('tileShape') ?? 'circle';
|
||||||
|
const TILE_SHAPES = [
|
||||||
|
{ key: 'rounded', icon: 'fa-square', isActive: currentTileShape === 'rounded', label: 'Rounded' },
|
||||||
|
{ key: 'circle', icon: 'fa-circle', isActive: currentTileShape === 'circle', label: 'Circle' },
|
||||||
|
{ key: 'hexagon', icon: 'fa-hexagon', isActive: currentTileShape === 'hexagon', label: 'Hexagon' },
|
||||||
|
{ key: 'octagon', icon: 'fa-shapes', isActive: currentTileShape === 'octagon', label: 'Octagon' },
|
||||||
|
];
|
||||||
|
|
||||||
|
// Tile border around video shapes
|
||||||
|
const currentTileBorderWidth = this._adapter.settings?.get?.('tileBorderWidth') ?? 0;
|
||||||
|
const currentTileBorderColor = this._adapter.settings?.get?.('tileBorderColor') ?? '#ffffff';
|
||||||
|
const TILE_BORDER_WIDTHS = [
|
||||||
|
{ value: 0, label: 'None', isActive: currentTileBorderWidth === 0 },
|
||||||
|
{ value: 1, label: '1px', isActive: currentTileBorderWidth === 1 },
|
||||||
|
{ value: 2, label: '2px', isActive: currentTileBorderWidth === 2 },
|
||||||
|
{ value: 4, label: '4px', isActive: currentTileBorderWidth === 4 },
|
||||||
];
|
];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -397,7 +432,6 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
hasRestore: this._spotlightSnapshot !== null,
|
hasRestore: this._spotlightSnapshot !== null,
|
||||||
presetCount,
|
presetCount,
|
||||||
hasPresets: presetCount > 0,
|
hasPresets: presetCount > 0,
|
||||||
// Story 3.2: Auto-apply configuration
|
|
||||||
hasScene: !!this._adapter.scenes?.current?.(),
|
hasScene: !!this._adapter.scenes?.current?.(),
|
||||||
autoApplyEnabled: autoApplyConfig.enabled,
|
autoApplyEnabled: autoApplyConfig.enabled,
|
||||||
autoApplyPresetName: autoApplyConfig.presetName,
|
autoApplyPresetName: autoApplyConfig.presetName,
|
||||||
@@ -407,8 +441,16 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
avModeEnabled: (game.webrtc?.settings?.world?.mode ?? 0) !== 0,
|
avModeEnabled: (game.webrtc?.settings?.world?.mode ?? 0) !== 0,
|
||||||
// Dock layout selector
|
// Dock layout selector
|
||||||
dockLayouts,
|
dockLayouts,
|
||||||
|
// Tile shape selector
|
||||||
|
tileShape: currentTileShape,
|
||||||
|
tileShapes: TILE_SHAPES,
|
||||||
|
// Tile border
|
||||||
|
tileBorderWidth: currentTileBorderWidth,
|
||||||
|
tileBorderColor: currentTileBorderColor,
|
||||||
|
tileBorderWidths: TILE_BORDER_WIDTHS,
|
||||||
// Story 5.2: Video widget width customization
|
// Story 5.2: Video widget width customization
|
||||||
widthOptions: WIDTH_OPTIONS,
|
smWidthOptions: SM_WIDTH_OPTIONS,
|
||||||
|
mdWidthOptions: MD_WIDTH_OPTIONS,
|
||||||
widgetWidthSm,
|
widgetWidthSm,
|
||||||
widgetWidthMd,
|
widgetWidthMd,
|
||||||
};
|
};
|
||||||
@@ -469,6 +511,9 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
case 'toggle-av-mode': this._onToggleAVMode(); break;
|
case 'toggle-av-mode': this._onToggleAVMode(); break;
|
||||||
case 'open-av-config': this._onOpenAVConfig(); break;
|
case 'open-av-config': this._onOpenAVConfig(); break;
|
||||||
case 'set-dock-layout': this._onSetDockLayout(btn.dataset.layout); break;
|
case 'set-dock-layout': this._onSetDockLayout(btn.dataset.layout); break;
|
||||||
|
case 'set-tile-shape': this._onSetTileShape(btn.dataset.shape); break;
|
||||||
|
case 'set-tile-border-width': this._onSetTileBorderWidth(parseInt(btn.dataset.width, 10)); break;
|
||||||
|
case 'reset-strip-position': this._onResetStripPosition(); break;
|
||||||
case 'close': this.close(); break;
|
case 'close': this.close(); break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -501,6 +546,15 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
mdSelect.addEventListener('change', () => this._onSetWidgetWidth(mdSelect.value, 'md'));
|
mdSelect.addEventListener('change', () => this._onSetWidgetWidth(mdSelect.value, 'md'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tile border color picker — Foundry overwrites inline template styles via setPosition,
|
||||||
|
// but the color input's value attribute IS preserved. However, click fires when opening
|
||||||
|
// the picker (before the user chooses), so listen for 'change' instead.
|
||||||
|
const borderColorInput = root.querySelector('input[data-action="set-tile-border-color"]');
|
||||||
|
if (borderColorInput) {
|
||||||
|
borderColorInput.value = this._adapter.settings?.get?.('tileBorderColor') ?? '#ffffff';
|
||||||
|
borderColorInput.addEventListener('change', () => this._onSetTileBorderColor(borderColorInput.value));
|
||||||
|
}
|
||||||
|
|
||||||
// Drag grip — custom drag (ApplicationV2 header is hidden)
|
// Drag grip — custom drag (ApplicationV2 header is hidden)
|
||||||
const grip = root.querySelector('[data-action="drag-grip"]');
|
const grip = root.querySelector('[data-action="drag-grip"]');
|
||||||
if (grip) {
|
if (grip) {
|
||||||
@@ -737,6 +791,8 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
if (!layoutKey) return;
|
if (!layoutKey) return;
|
||||||
try {
|
try {
|
||||||
await this._adapter.settings?.set?.('dockLayout', layoutKey);
|
await this._adapter.settings?.set?.('dockLayout', layoutKey);
|
||||||
|
// Reset per-user size override so the world layout takes effect
|
||||||
|
await this._adapter.settings?.set?.('dockLayoutExpanded', '');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[ScryingPool] Failed to set dockLayout:', err);
|
console.error('[ScryingPool] Failed to set dockLayout:', err);
|
||||||
}
|
}
|
||||||
@@ -760,6 +816,59 @@ export class DirectorsBoard extends _AppBase {
|
|||||||
if (this.rendered) this.render({ force: true });
|
if (this.rendered) this.render({ force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the tile shape for participant avatars.
|
||||||
|
* @param {string} shape - 'rounded', 'circle', 'hexagon', or 'octagon'
|
||||||
|
*/
|
||||||
|
async _onSetTileShape(shape) {
|
||||||
|
if (!shape) return;
|
||||||
|
try {
|
||||||
|
await this._adapter.settings?.set?.('tileShape', shape);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[ScryingPool] Failed to set tile shape:', err);
|
||||||
|
}
|
||||||
|
if (this.rendered) this.render({ force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the border width around video shapes.
|
||||||
|
* @param {number} width - 0, 1, 2, or 4
|
||||||
|
*/
|
||||||
|
async _onSetTileBorderWidth(width) {
|
||||||
|
if (width == null) return;
|
||||||
|
try {
|
||||||
|
await this._adapter.settings?.set?.('tileBorderWidth', width);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[ScryingPool] Failed to set tile border width:', err);
|
||||||
|
}
|
||||||
|
if (this.rendered) this.render({ force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the border color around video shapes.
|
||||||
|
* @param {string} color - hex color string e.g. '#ff0000'
|
||||||
|
*/
|
||||||
|
async _onSetTileBorderColor(color) {
|
||||||
|
if (!color) return;
|
||||||
|
try {
|
||||||
|
await this._adapter.settings?.set?.('tileBorderColor', color);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[ScryingPool] Failed to set tile border color:', err);
|
||||||
|
}
|
||||||
|
if (this.rendered) this.render({ force: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the saved strip position flag so the strip defaults to its original position.
|
||||||
|
*/
|
||||||
|
_onResetStripPosition() {
|
||||||
|
try {
|
||||||
|
game.user?.setFlag?.('scrying-pool', 'stripState', null);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[ScryingPool] Failed to reset strip position:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens the PresetSaveDialog for saving the current visibility matrix as a preset.
|
* Opens the PresetSaveDialog for saving the current visibility matrix as a preset.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -143,8 +143,32 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
/** @type {StripOverlayLayer|null} */
|
/** @type {StripOverlayLayer|null} */
|
||||||
this._stripOverlayLayer = null;
|
this._stripOverlayLayer = null;
|
||||||
|
|
||||||
|
/** @type {Map<string, {retryCount: number, retryTimer: number|null}>} */
|
||||||
|
this._videoStreamRetries = new Map();
|
||||||
|
/** @type {number|null} */
|
||||||
|
this._healthCheckInterval = null;
|
||||||
|
/** @type {number|string|null} */
|
||||||
|
this._userConnectedHookId = null;
|
||||||
|
/** @type {string|null} */
|
||||||
|
this._focusedUserId = null;
|
||||||
|
/** @type {number|null} */
|
||||||
|
this._positionSaveTimer = null;
|
||||||
|
|
||||||
// Load saved position from user flags
|
// Load saved position from user flags
|
||||||
this._loadPosition();
|
this._loadPosition();
|
||||||
|
|
||||||
|
/** Bound keydown handler for Escape-to-exit-focus */
|
||||||
|
this._onDocumentKeydown = (e) => {
|
||||||
|
if (e.key === 'Escape' && this._focusedUserId) {
|
||||||
|
this._focusedUserId = null;
|
||||||
|
if (typeof this.render === 'function') {
|
||||||
|
this.render({ force: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (typeof document?.addEventListener === 'function') {
|
||||||
|
document.addEventListener('keydown', this._onDocumentKeydown);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Loads saved window position from GM user flag. */
|
/** Loads saved window position from GM user flag. */
|
||||||
@@ -152,10 +176,15 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
try {
|
try {
|
||||||
const saved = game.user?.getFlag?.('scrying-pool', 'stripState');
|
const saved = game.user?.getFlag?.('scrying-pool', 'stripState');
|
||||||
if (saved?.left != null && saved?.top != null) {
|
if (saved?.left != null && saved?.top != null) {
|
||||||
|
if (saved.left < 0 || saved.top < 0) return;
|
||||||
|
const screenW = typeof window !== 'undefined' ? (window.screen?.availWidth ?? Infinity) : Infinity;
|
||||||
|
const screenH = typeof window !== 'undefined' ? (window.screen?.availHeight ?? Infinity) : Infinity;
|
||||||
|
if (saved.left < screenW - 50 && saved.top < screenH - 50) {
|
||||||
if (this.options?.position) {
|
if (this.options?.position) {
|
||||||
Object.assign(this.options.position, { left: saved.left, top: saved.top });
|
Object.assign(this.options.position, { left: saved.left, top: saved.top });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (_e) { /* no-op in test environment */ }
|
} catch (_e) { /* no-op in test environment */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +217,22 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
? userIds
|
? userIds
|
||||||
: userIds.filter(id => id !== currentUserId);
|
: userIds.filter(id => id !== currentUserId);
|
||||||
|
|
||||||
|
// Re-order participants per GM's saved order (drag-and-drop)
|
||||||
|
try {
|
||||||
|
const savedOrder = game.user?.getFlag?.('scrying-pool', 'participantOrder');
|
||||||
|
if (Array.isArray(savedOrder) && savedOrder.length > 0) {
|
||||||
|
const orderMap = new Map(savedOrder.map((id, idx) => [id, idx]));
|
||||||
|
filteredUserIds.sort((a, b) => {
|
||||||
|
const ai = orderMap.get(a);
|
||||||
|
const bi = orderMap.get(b);
|
||||||
|
if (ai !== undefined && bi !== undefined) return ai - bi;
|
||||||
|
if (ai !== undefined) return -1;
|
||||||
|
if (bi !== undefined) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (_e) { /* no-op in test environment */ }
|
||||||
|
|
||||||
// Check if we have stream access for video replacement (full AV replacement mode)
|
// Check if we have stream access for video replacement (full AV replacement mode)
|
||||||
const hasStreamAccess = this._adapter.webrtc?.getMediaStreamForUser !== undefined;
|
const hasStreamAccess = this._adapter.webrtc?.getMediaStreamForUser !== undefined;
|
||||||
|
|
||||||
@@ -200,8 +245,16 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
this._portraitFallbackHandler
|
this._portraitFallbackHandler
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Mark focused participant for gold ring visual
|
||||||
|
participants.forEach(p => { p.isFocused = this._focusedUserId === p.userId; });
|
||||||
|
|
||||||
// Remove hidden participants from the strip — they are managed via the Directors Board.
|
// Remove hidden participants from the strip — they are managed via the Directors Board.
|
||||||
const visibleParticipants = participants.filter(p => p.state !== 'hidden');
|
let visibleParticipants = participants.filter(p => p.state !== 'hidden');
|
||||||
|
|
||||||
|
// Spotlight: if a participant is focused, only show that one
|
||||||
|
if (this._focusedUserId) {
|
||||||
|
visibleParticipants = visibleParticipants.filter(p => p.userId === this._focusedUserId);
|
||||||
|
}
|
||||||
|
|
||||||
// Dock layout: world setting gives direction+canonical size; client override only applies if user toggled
|
// Dock layout: world setting gives direction+canonical size; client override only applies if user toggled
|
||||||
const rawLayout = this._adapter.settings?.get?.('dockLayout');
|
const rawLayout = this._adapter.settings?.get?.('dockLayout');
|
||||||
@@ -221,9 +274,18 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
const widgetWidthMd = this._adapter.settings?.get?.('widgetWidthMd') ?? '150';
|
const widgetWidthMd = this._adapter.settings?.get?.('widgetWidthMd') ?? '150';
|
||||||
const isLarge = effectiveSize === 'md';
|
const isLarge = effectiveSize === 'md';
|
||||||
const effectiveWidth = isLarge ? widgetWidthMd : widgetWidthSm;
|
const effectiveWidth = isLarge ? widgetWidthMd : widgetWidthSm;
|
||||||
|
const isSpotlightActive = !!this._focusedUserId;
|
||||||
|
const widgetWidth = isSpotlightActive ? String(parseInt(effectiveWidth, 10) * 2) : effectiveWidth;
|
||||||
|
|
||||||
const isGM = this._adapter.users.isGM?.() ?? false;
|
const isGM = this._adapter.users.isGM?.() ?? false;
|
||||||
|
|
||||||
|
// Tile shape for participant avatars
|
||||||
|
const tileShape = this._adapter.settings?.get?.('tileShape') ?? 'circle';
|
||||||
|
|
||||||
|
// Tile border around video shapes
|
||||||
|
const tileBorderWidth = this._adapter.settings?.get?.('tileBorderWidth') ?? 0;
|
||||||
|
const tileBorderColor = this._adapter.settings?.get?.('tileBorderColor') ?? '#ffffff';
|
||||||
|
|
||||||
return {
|
return {
|
||||||
participants: visibleParticipants,
|
participants: visibleParticipants,
|
||||||
isExpanded,
|
isExpanded,
|
||||||
@@ -234,7 +296,13 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
hasStreamAccess,
|
hasStreamAccess,
|
||||||
isGM,
|
isGM,
|
||||||
// Story 5.2: Video widget width customization
|
// Story 5.2: Video widget width customization
|
||||||
widgetWidth: effectiveWidth,
|
isSpotlightActive,
|
||||||
|
widgetWidth,
|
||||||
|
// Tile shape
|
||||||
|
tileShape,
|
||||||
|
// Tile border
|
||||||
|
tileBorderWidth,
|
||||||
|
tileBorderColor,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +315,11 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
el.querySelectorAll('[data-action="open-popover"]').forEach(btn => {
|
el.querySelectorAll('[data-action="open-popover"]').forEach(btn => {
|
||||||
const userId = btn.dataset.userId;
|
const userId = btn.dataset.userId;
|
||||||
btn.addEventListener('click', e => {
|
btn.addEventListener('click', e => {
|
||||||
|
if (e.shiftKey) {
|
||||||
|
e.stopPropagation();
|
||||||
|
this._toggleFocus(userId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
this._openPopover(userId, btn);
|
this._openPopover(userId, btn);
|
||||||
});
|
});
|
||||||
@@ -257,6 +330,33 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Drag-and-drop reordering of participants
|
||||||
|
// Remove old DnD listeners first to prevent duplicates on re-render
|
||||||
|
el.querySelectorAll('.sp-strip__participant-item').forEach(item => {
|
||||||
|
const existing = item._dndHandlers;
|
||||||
|
if (existing) {
|
||||||
|
item.removeEventListener('dragstart', existing.dragstart);
|
||||||
|
item.removeEventListener('dragover', existing.dragover);
|
||||||
|
item.removeEventListener('drop', existing.drop);
|
||||||
|
item.removeEventListener('dragend', existing.dragend);
|
||||||
|
item.removeEventListener('dragleave', existing.dragleave);
|
||||||
|
}
|
||||||
|
const handlers = {
|
||||||
|
dragstart: e => this._onDragStart(e),
|
||||||
|
dragover: e => this._onDragOver(e),
|
||||||
|
drop: e => this._onDrop(e),
|
||||||
|
dragend: e => this._onDragEnd(e),
|
||||||
|
dragleave: e => this._onDragLeave(e),
|
||||||
|
};
|
||||||
|
item._dndHandlers = handlers;
|
||||||
|
item.draggable = true;
|
||||||
|
item.addEventListener('dragstart', handlers.dragstart);
|
||||||
|
item.addEventListener('dragover', handlers.dragover);
|
||||||
|
item.addEventListener('drop', handlers.drop);
|
||||||
|
item.addEventListener('dragend', handlers.dragend);
|
||||||
|
item.addEventListener('dragleave', handlers.dragleave);
|
||||||
|
});
|
||||||
|
|
||||||
const toggle = el.querySelector('[data-action="toggle-expanded"]');
|
const toggle = el.querySelector('[data-action="toggle-expanded"]');
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
toggle.addEventListener('click', () => this._toggleExpanded());
|
toggle.addEventListener('click', () => this._toggleExpanded());
|
||||||
@@ -279,8 +379,13 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drag grip — custom drag implementation (Foundry v14 ApplicationV1 does not expose its drag handler)
|
// Drag grip — custom drag implementation (Foundry v14 ApplicationV1 does not expose its drag handler)
|
||||||
|
// Double-click grip resets participant order to connection order
|
||||||
const grip = el.querySelector('[data-action="drag-grip"]');
|
const grip = el.querySelector('[data-action="drag-grip"]');
|
||||||
if (grip) {
|
if (grip) {
|
||||||
|
grip.addEventListener('dblclick', e => {
|
||||||
|
e.preventDefault();
|
||||||
|
this._resetParticipantOrder();
|
||||||
|
});
|
||||||
grip.addEventListener('mousedown', e => {
|
grip.addEventListener('mousedown', e => {
|
||||||
if (e.button !== 0) return;
|
if (e.button !== 0) return;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -297,6 +402,7 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
const onUp = () => {
|
const onUp = () => {
|
||||||
document.removeEventListener('mousemove', onMove);
|
document.removeEventListener('mousemove', onMove);
|
||||||
document.removeEventListener('mouseup', onUp);
|
document.removeEventListener('mouseup', onUp);
|
||||||
|
this._savePosition();
|
||||||
};
|
};
|
||||||
document.addEventListener('mousemove', onMove);
|
document.addEventListener('mousemove', onMove);
|
||||||
document.addEventListener('mouseup', onUp);
|
document.addEventListener('mouseup', onUp);
|
||||||
@@ -316,13 +422,32 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
this._attachVideoStreams(el);
|
this._attachVideoStreams(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start stream monitoring on first render
|
||||||
|
if (this._healthCheckInterval === null) {
|
||||||
|
this._initStreamMonitoring();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set CSS custom properties — Foundry's setPosition() overwrites inline template styles
|
||||||
|
const setVar = (name, value) => {
|
||||||
|
if (value !== undefined && value !== null) el.style.setProperty(name, value);
|
||||||
|
};
|
||||||
|
const widgetWidth = context?.widgetWidth ?? '150';
|
||||||
|
setVar('--sp-widget-width', `${widgetWidth}px`);
|
||||||
|
const bw = context?.tileBorderWidth ?? 0;
|
||||||
|
setVar('--sp-tile-border-width', `${bw}px`);
|
||||||
|
setVar('--sp-tile-border-color', context?.tileBorderColor ?? '#ffffff');
|
||||||
|
setVar('--sp-tile-border-active', bw > 0 ? '1' : '0');
|
||||||
|
|
||||||
// Sync the outer Application window width with the selected dock layout.
|
// Sync the outer Application window width with the selected dock layout.
|
||||||
|
// Spotlight mode doubles the strip window to fit the enlarged tile.
|
||||||
if (typeof this.setPosition === 'function') {
|
if (typeof this.setPosition === 'function') {
|
||||||
const layout = context?.dockLayout ?? 'vertical-sm';
|
const layout = context?.dockLayout ?? 'vertical-sm';
|
||||||
const n = context?.participants?.length ?? 0;
|
const n = context?.participants?.length ?? 0;
|
||||||
const width = this._computeStripWidth(layout, n);
|
const spotlightMultiplier = context?.isSpotlightActive ? 2 : 1;
|
||||||
|
const width = this._computeStripWidth(layout, n) * spotlightMultiplier;
|
||||||
const height = this._computeStripHeight(layout, n);
|
const height = this._computeStripHeight(layout, n);
|
||||||
this.setPosition(height === 'auto' ? { width, height: 'auto' } : { width, height });
|
const adjustedHeight = height === 'auto' ? 'auto' : height * spotlightMultiplier;
|
||||||
|
this.setPosition(adjustedHeight === 'auto' ? { width, height: 'auto' } : { width, height: adjustedHeight });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,8 +480,8 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
const mdWidth = this._getWidgetWidth('md');
|
const mdWidth = this._getWidgetWidth('md');
|
||||||
|
|
||||||
switch (layout) {
|
switch (layout) {
|
||||||
case 'vertical-sm': return smWidth + 2; // widget + 2px border
|
case 'vertical-sm': return rowWidth(smWidth, 1);
|
||||||
case 'vertical-md': return 242; // 240px strip + 2px border (expanded view has fixed width)
|
case 'vertical-md': return rowWidth(mdWidth, 1);
|
||||||
case 'horizontal-sm': return rowWidth(smWidth, Math.min(maxCols, n));
|
case 'horizontal-sm': return rowWidth(smWidth, Math.min(maxCols, n));
|
||||||
case 'horizontal-md': return rowWidth(mdWidth, Math.min(maxCols, n));
|
case 'horizontal-md': return rowWidth(mdWidth, Math.min(maxCols, n));
|
||||||
case 'mosaic-sm': return rowWidth(smWidth, Math.min(maxCols, Math.ceil(Math.sqrt(n))));
|
case 'mosaic-sm': return rowWidth(smWidth, Math.min(maxCols, Math.ceil(Math.sqrt(n))));
|
||||||
@@ -410,6 +535,14 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
this._activePopover = null;
|
this._activePopover = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove document-level keydown listener
|
||||||
|
if (typeof document?.removeEventListener === 'function') {
|
||||||
|
document.removeEventListener('keydown', this._onDocumentKeydown);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tear down stream monitoring
|
||||||
|
this._teardownStreamMonitoring();
|
||||||
|
|
||||||
// Clean up video elements and streams when closing
|
// Clean up video elements and streams when closing
|
||||||
this._cleanupVideoStreams();
|
this._cleanupVideoStreams();
|
||||||
|
|
||||||
@@ -424,18 +557,24 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleans up all video elements and their associated streams.
|
* Removes video elements from the DOM when the strip closes.
|
||||||
* Called when the strip is closed to prevent memory leaks.
|
* Does NOT stop the underlying MediaStream tracks — those belong to
|
||||||
|
* FoundryVTT's WebRTC system (`game.webrtc.client`) and must stay alive
|
||||||
|
* so they can be re-attached if the strip re-opens later.
|
||||||
*/
|
*/
|
||||||
_cleanupVideoStreams() {
|
_cleanupVideoStreams() {
|
||||||
if (typeof document === 'undefined') return;
|
if (typeof document === 'undefined') return;
|
||||||
|
|
||||||
const videoElements = document.querySelectorAll?.('.sp-participant-video__element') ?? [];
|
// Clear all retry timers
|
||||||
videoElements.forEach(videoEl => {
|
for (const [, retryInfo] of this._videoStreamRetries) {
|
||||||
// Stop all tracks in the stream
|
if (retryInfo.retryTimer !== null) {
|
||||||
if (videoEl.srcObject instanceof MediaStream) {
|
clearTimeout(retryInfo.retryTimer);
|
||||||
videoEl.srcObject.getTracks().forEach(track => track.stop());
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
this._videoStreamRetries.clear();
|
||||||
|
|
||||||
|
const videoElements = this.element?.querySelectorAll?.('.sp-participant-video__element') ?? [];
|
||||||
|
videoElements.forEach(videoEl => {
|
||||||
videoEl.srcObject = null;
|
videoEl.srcObject = null;
|
||||||
videoEl.remove();
|
videoEl.remove();
|
||||||
});
|
});
|
||||||
@@ -626,9 +765,13 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
// Set up error handling
|
// Set up error handling
|
||||||
videoElement.addEventListener('error', () => {
|
videoElement.addEventListener('error', () => {
|
||||||
console.warn('[ScryingPool] Video element error for user:', userId);
|
console.warn('[ScryingPool] Video element error for user:', userId);
|
||||||
|
this._onStreamError(userId);
|
||||||
});
|
});
|
||||||
|
|
||||||
videoContainer.appendChild(videoElement);
|
videoContainer.appendChild(videoElement);
|
||||||
|
|
||||||
|
// Monitor this stream for loss/failure
|
||||||
|
this._monitorStream(userId, videoElement, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -649,6 +792,389 @@ export class ScryingPoolStrip extends _AppBase {
|
|||||||
this.render({ force: false });
|
this.render({ force: false });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Stream monitoring and recovery ─────────────────────────────────────────
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialises periodic stream health checks and hooks for user connection changes.
|
||||||
|
* Safe to call multiple times — guards against double-init via _healthCheckInterval.
|
||||||
|
*/
|
||||||
|
_initStreamMonitoring() {
|
||||||
|
// Periodic health check every 15 seconds
|
||||||
|
this._healthCheckInterval = setInterval(() => this._checkVideoStreamHealth(), 15000);
|
||||||
|
|
||||||
|
// Auto-save strip position every 30 seconds
|
||||||
|
this._positionSaveTimer = setInterval(() => this._savePosition(), 30000);
|
||||||
|
|
||||||
|
// Watch for user connection changes to refresh streams
|
||||||
|
if (typeof Hooks !== 'undefined') {
|
||||||
|
this._userConnectedHookId = Hooks.on('userConnected', (userId, connected) => {
|
||||||
|
if (connected) {
|
||||||
|
setTimeout(() => this._refreshVideoStreams(), 1500);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tears down stream monitoring: clears interval, removes hooks, cancels retries.
|
||||||
|
*/
|
||||||
|
_teardownStreamMonitoring() {
|
||||||
|
// Clear health check interval
|
||||||
|
if (this._healthCheckInterval !== null) {
|
||||||
|
clearInterval(this._healthCheckInterval);
|
||||||
|
this._healthCheckInterval = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear position save timer
|
||||||
|
if (this._positionSaveTimer !== null) {
|
||||||
|
clearInterval(this._positionSaveTimer);
|
||||||
|
this._positionSaveTimer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove userConnected hook
|
||||||
|
if (this._userConnectedHookId !== null && typeof Hooks !== 'undefined') {
|
||||||
|
Hooks.off('userConnected', this._userConnectedHookId);
|
||||||
|
this._userConnectedHookId = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cancel all pending retries
|
||||||
|
for (const [, retryInfo] of this._videoStreamRetries) {
|
||||||
|
if (retryInfo.retryTimer !== null) {
|
||||||
|
clearTimeout(retryInfo.retryTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._videoStreamRetries.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monitors a video stream for loss or failure events.
|
||||||
|
* Sets up listeners on the track lifecycle and starts health tracking.
|
||||||
|
* @param {string} userId
|
||||||
|
* @param {HTMLVideoElement} videoEl
|
||||||
|
* @param {MediaStream} stream
|
||||||
|
*/
|
||||||
|
_monitorStream(userId, videoEl, stream) {
|
||||||
|
// Watch for video track ended (stream truly lost)
|
||||||
|
const videoTracks = stream.getVideoTracks();
|
||||||
|
for (const track of videoTracks) {
|
||||||
|
track.addEventListener('ended', () => this._onVideoTrackEnded(userId), { once: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch for track removal (mute event may indicate transient issue)
|
||||||
|
for (const track of videoTracks) {
|
||||||
|
track.addEventListener('mute', () => {
|
||||||
|
// Brief delay to see if unmute fires naturally
|
||||||
|
setTimeout(() => {
|
||||||
|
if (track.readyState === 'ended') {
|
||||||
|
this._onVideoTrackEnded(userId);
|
||||||
|
}
|
||||||
|
}, 2000);
|
||||||
|
}, { once: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch for playback stall
|
||||||
|
videoEl.addEventListener('stalled', () => {
|
||||||
|
setTimeout(() => {
|
||||||
|
if (videoEl.readyState < HTMLMediaElement.HAVE_CURRENT_DATA) {
|
||||||
|
this._scheduleStreamRetry(userId);
|
||||||
|
}
|
||||||
|
}, 3000);
|
||||||
|
}, { once: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a video track is ended (stream disconnected).
|
||||||
|
* Shows a warning and schedules a retry.
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_onVideoTrackEnded(userId) {
|
||||||
|
this._notify('warn', 'scrying-pool.stream.lost', userId);
|
||||||
|
this._scheduleStreamRetry(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a video element fires an error event.
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_onStreamError(userId) {
|
||||||
|
this._scheduleStreamRetry(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Schedules a retry for a user's video stream with exponential backoff.
|
||||||
|
* @param {string} userId
|
||||||
|
* @param {number} [delay=2000] - Initial delay in ms
|
||||||
|
*/
|
||||||
|
_scheduleStreamRetry(userId, delay = 2000) {
|
||||||
|
// Cancel any existing retry for this user
|
||||||
|
this._clearStreamRetry(userId);
|
||||||
|
|
||||||
|
const retryInfo = this._videoStreamRetries.get(userId) ?? { retryCount: 0, retryTimer: null };
|
||||||
|
|
||||||
|
if (retryInfo.retryCount >= 3) {
|
||||||
|
this._notify('error', 'scrying-pool.stream.failed', userId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._notify('info', 'scrying-pool.stream.recovering', userId);
|
||||||
|
|
||||||
|
retryInfo.retryTimer = setTimeout(() => {
|
||||||
|
this._retryStream(userId);
|
||||||
|
}, delay);
|
||||||
|
|
||||||
|
retryInfo.retryCount++;
|
||||||
|
this._videoStreamRetries.set(userId, retryInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to re-acquire and re-attach a user's video stream.
|
||||||
|
* On success, clears retry state and notifies. On failure, schedules next backoff.
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_retryStream(userId) {
|
||||||
|
const stream = this._adapter.webrtc?.getMediaStreamForUser?.(userId);
|
||||||
|
const avatar = this.element?.querySelector(`[data-user-id="${userId}"]`);
|
||||||
|
|
||||||
|
if (stream instanceof MediaStream && avatar) {
|
||||||
|
// Clean up the old video container state
|
||||||
|
const videoContainer = avatar.querySelector('.sp-participant-video');
|
||||||
|
if (videoContainer) {
|
||||||
|
const oldVideo = videoContainer.querySelector('video');
|
||||||
|
if (oldVideo) {
|
||||||
|
oldVideo.srcObject = null;
|
||||||
|
oldVideo.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-attach with the (possibly new) stream
|
||||||
|
this._attachVideoStream(userId, avatar);
|
||||||
|
this._clearStreamRetry(userId);
|
||||||
|
this._notify('info', 'scrying-pool.stream.recovered', userId);
|
||||||
|
} else {
|
||||||
|
// Exponential backoff: 2s, 4s, 8s
|
||||||
|
const retryInfo = this._videoStreamRetries.get(userId);
|
||||||
|
const nextDelay = Math.pow(2, (retryInfo?.retryCount ?? 1)) * 1000;
|
||||||
|
this._scheduleStreamRetry(userId, nextDelay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels any pending retry timer for a user and resets retry state.
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_clearStreamRetry(userId) {
|
||||||
|
const retryInfo = this._videoStreamRetries.get(userId);
|
||||||
|
if (retryInfo) {
|
||||||
|
if (retryInfo.retryTimer !== null) {
|
||||||
|
clearTimeout(retryInfo.retryTimer);
|
||||||
|
}
|
||||||
|
this._videoStreamRetries.delete(userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Periodic health check — inspects all participant video elements and
|
||||||
|
* triggers retries for any that are in a failed or stuck state.
|
||||||
|
*/
|
||||||
|
_checkVideoStreamHealth() {
|
||||||
|
if (!this.element) return;
|
||||||
|
|
||||||
|
this.element.querySelectorAll('.sp-participant-avatar').forEach(avatar => {
|
||||||
|
const userId = avatar.dataset.userId;
|
||||||
|
if (!userId) return;
|
||||||
|
|
||||||
|
const videoContainer = avatar.querySelector('.sp-participant-video');
|
||||||
|
const videoEl = avatar.querySelector('.sp-participant-video__element');
|
||||||
|
|
||||||
|
// Expected video container but no video element → needs attach
|
||||||
|
if (videoContainer && !videoEl) {
|
||||||
|
const stream = this._adapter.webrtc?.getMediaStreamForUser?.(userId);
|
||||||
|
if (stream instanceof MediaStream) {
|
||||||
|
this._attachVideoStream(userId, avatar);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Video element exists but has no stream or ended tracks → trigger retry
|
||||||
|
if (videoEl) {
|
||||||
|
const stream = videoEl.srcObject;
|
||||||
|
if (stream instanceof MediaStream) {
|
||||||
|
const hasEndedTrack = stream.getVideoTracks().some(t => t.readyState === 'ended');
|
||||||
|
if (hasEndedTrack && !this._videoStreamRetries.has(userId)) {
|
||||||
|
this._onVideoTrackEnded(userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Re-order participants (Drag & Drop) ─────────────────────────────────
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles drag start on a participant item.
|
||||||
|
* @param {DragEvent} e
|
||||||
|
*/
|
||||||
|
_onDragStart(e) {
|
||||||
|
const item = e.target.closest('.sp-strip__participant-item');
|
||||||
|
if (!item) return;
|
||||||
|
const userId = item.querySelector('[data-user-id]')?.dataset?.userId;
|
||||||
|
if (!userId) return;
|
||||||
|
e.dataTransfer.setData('text/plain', userId);
|
||||||
|
e.dataTransfer.effectAllowed = 'move';
|
||||||
|
item.classList.add('sp-dragging');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles drag over on a participant item — shows drop indicator.
|
||||||
|
* @param {DragEvent} e
|
||||||
|
*/
|
||||||
|
_onDragOver(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.dataTransfer.dropEffect = 'move';
|
||||||
|
const item = e.target.closest('.sp-strip__participant-item');
|
||||||
|
if (!item) return;
|
||||||
|
item.classList.add('sp-drag-over');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles drop — reorders participants and persists the order.
|
||||||
|
* @param {DragEvent} e
|
||||||
|
*/
|
||||||
|
_onDrop(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
const fromUserId = e.dataTransfer.getData('text/plain');
|
||||||
|
const toItem = e.target.closest('.sp-strip__participant-item');
|
||||||
|
if (!toItem || !fromUserId) return;
|
||||||
|
const toUserId = toItem.querySelector('[data-user-id]')?.dataset?.userId;
|
||||||
|
if (!toUserId || fromUserId === toUserId) return;
|
||||||
|
|
||||||
|
const el = this.element;
|
||||||
|
if (!el) return;
|
||||||
|
const items = [...el.querySelectorAll('.sp-strip__participant-item')];
|
||||||
|
const userIds = items.map(item => item.querySelector('[data-user-id]')?.dataset?.userId).filter(Boolean);
|
||||||
|
const fromIdx = userIds.indexOf(fromUserId);
|
||||||
|
const toIdx = userIds.indexOf(toUserId);
|
||||||
|
if (fromIdx === -1 || toIdx === -1) return;
|
||||||
|
|
||||||
|
userIds.splice(fromIdx, 1);
|
||||||
|
const adjustedTo = fromIdx < toIdx ? toIdx - 1 : toIdx;
|
||||||
|
userIds.splice(adjustedTo, 0, fromUserId);
|
||||||
|
|
||||||
|
this._saveParticipantOrder(userIds);
|
||||||
|
if (typeof this.render === 'function') {
|
||||||
|
this.render({ force: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles drag end — removes visual indicators.
|
||||||
|
*/
|
||||||
|
_onDragEnd() {
|
||||||
|
this.element?.querySelectorAll('.sp-strip__participant-item')?.forEach(item => {
|
||||||
|
item.classList.remove('sp-dragging', 'sp-drag-over');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles drag leave — removes drop indicator from the exited item.
|
||||||
|
* @param {DragEvent} e
|
||||||
|
*/
|
||||||
|
_onDragLeave(e) {
|
||||||
|
const item = e.target.closest('.sp-strip__participant-item');
|
||||||
|
if (item) item.classList.remove('sp-drag-over');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persists participant order to GM user flag.
|
||||||
|
* @param {string[]} orderedUserIds
|
||||||
|
*/
|
||||||
|
_saveParticipantOrder(orderedUserIds) {
|
||||||
|
if (typeof game === 'undefined') return;
|
||||||
|
try {
|
||||||
|
game.user?.setFlag?.('scrying-pool', 'participantOrder', orderedUserIds);
|
||||||
|
} catch (_e) { /* no-op */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears saved order — next render uses connection order.
|
||||||
|
*/
|
||||||
|
_resetParticipantOrder() {
|
||||||
|
if (typeof game === 'undefined') return;
|
||||||
|
try {
|
||||||
|
game.user?.unsetFlag?.('scrying-pool', 'participantOrder');
|
||||||
|
} catch (_e) { /* no-op */ }
|
||||||
|
if (typeof this.render === 'function') {
|
||||||
|
this.render({ force: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Spotlight / Focus ────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggles focus on a participant. If already focused, exits focus mode.
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_toggleFocus(userId) {
|
||||||
|
if (this._focusedUserId === userId) {
|
||||||
|
this._focusedUserId = null;
|
||||||
|
} else {
|
||||||
|
this._focusedUserId = userId;
|
||||||
|
}
|
||||||
|
if (typeof this.render === 'function') {
|
||||||
|
this.render({ force: false });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Auto-save position ───────────────────────────────────────────────────
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves current strip position to GM user flag.
|
||||||
|
*/
|
||||||
|
_savePosition() {
|
||||||
|
if (typeof game === 'undefined') return;
|
||||||
|
try {
|
||||||
|
const pos = this.position;
|
||||||
|
if (pos?.left == null || pos?.top == null) return;
|
||||||
|
game.user?.setFlag?.('scrying-pool', 'stripState', {
|
||||||
|
left: pos.left,
|
||||||
|
top: pos.top,
|
||||||
|
width: pos.width ?? 240,
|
||||||
|
height: pos.height ?? 'auto',
|
||||||
|
savedAt: Date.now(),
|
||||||
|
});
|
||||||
|
} catch (_e) { /* no-op */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows a notification with i18n support and safe fallback for test environments.
|
||||||
|
* @param {'info'|'warn'|'error'} level
|
||||||
|
* @param {string} i18nKey
|
||||||
|
* @param {string} userId
|
||||||
|
*/
|
||||||
|
_notify(level, i18nKey, userId) {
|
||||||
|
const userName = this._getUserName(userId);
|
||||||
|
let msg;
|
||||||
|
try {
|
||||||
|
msg = game.i18n?.format?.(i18nKey, { name: userName }) ?? `${i18nKey}: ${userName}`;
|
||||||
|
} catch {
|
||||||
|
msg = `${i18nKey}: ${userName}`;
|
||||||
|
}
|
||||||
|
this._adapter.notifications?.[level]?.(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves a display name for a user ID.
|
||||||
|
* @param {string} userId
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
_getUserName(userId) {
|
||||||
|
try {
|
||||||
|
return this._adapter.users.get?.(userId)?.name ?? userId;
|
||||||
|
} catch {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
/**
|
||||||
|
* styles/components/_buttons.less
|
||||||
|
*
|
||||||
|
* Shared SP button component — single source of truth for all dialog buttons.
|
||||||
|
* Imported by each dialog that needs buttons; all selectors scoped under
|
||||||
|
* the dialog's own namespace.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Base button — every dialog button should extend this
|
||||||
|
.sp-btn {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: var(--sp-btn-gap, 6px);
|
||||||
|
padding: var(--sp-btn-padding, 7px 14px);
|
||||||
|
font-family: var(--font-primary, ui-sans-serif, system-ui, sans-serif);
|
||||||
|
font-size: var(--sp-btn-font-size, 12px);
|
||||||
|
font-weight: 600;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
|
||||||
|
line-height: 1.2;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
i { font-size: 0.9em; pointer-events: none; }
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
opacity: 0.45;
|
||||||
|
cursor: not-allowed;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Primary action — green accent
|
||||||
|
&--primary {
|
||||||
|
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||||
|
color: var(--sp-btn-primary-text, #fff);
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
|
||||||
|
&:hover:not(:disabled) {
|
||||||
|
background: var(--sp-btn-primary-hover, var(--sp-accent-hover));
|
||||||
|
color: var(--sp-btn-primary-text, #fff);
|
||||||
|
}
|
||||||
|
&:active:not(:disabled) {
|
||||||
|
background: var(--sp-btn-primary-active, var(--sp-accent-active));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Secondary — subtle, neutral
|
||||||
|
&--secondary {
|
||||||
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
&:hover:not(:disabled) {
|
||||||
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Danger — red
|
||||||
|
&--danger {
|
||||||
|
background: var(--sp-btn-danger-bg, var(--sp-color-red));
|
||||||
|
color: var(--sp-btn-danger-text, #fff);
|
||||||
|
|
||||||
|
&:hover:not(:disabled) {
|
||||||
|
background: var(--sp-btn-danger-hover, var(--sp-color-red-dark));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sizes
|
||||||
|
&--sm {
|
||||||
|
padding: var(--sp-btn-padding-sm, 4px 10px);
|
||||||
|
font-size: var(--sp-btn-font-size-sm, 11px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--lg {
|
||||||
|
padding: var(--sp-btn-padding-lg, 9px 18px);
|
||||||
|
font-size: var(--sp-btn-font-size-lg, 13px);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Icon-only
|
||||||
|
&--icon {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 13px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -94,13 +94,13 @@
|
|||||||
|
|
||||||
// Hover state
|
// Hover state
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgba(0, 0, 0, 0.1);
|
background-color: rgba(255, 255, 255, 0.06);
|
||||||
color: var(--sp-accent-emphasis, var(--sp-accent));
|
color: var(--sp-accent-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Active state
|
// Active state
|
||||||
&:active {
|
&:active {
|
||||||
background-color: rgba(0, 0, 0, 0.2);
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Focus state
|
// Focus state
|
||||||
|
|||||||
@@ -10,13 +10,12 @@
|
|||||||
// via DEFAULT_OPTIONS.classes. The content section and footer live inside PARTS.
|
// via DEFAULT_OPTIONS.classes. The content section and footer live inside PARTS.
|
||||||
|
|
||||||
.scrying-pool.directors-board {
|
.scrying-pool.directors-board {
|
||||||
background: linear-gradient(175deg, hsl(220, 18%, 13%) 0%, hsl(220, 15%, 10%) 100%);
|
background: var(--sp-dialog-bg);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border: var(--sp-dialog-border);
|
||||||
border-top: 2px solid hsl(200, 55%, 40%);
|
border-top: 2px solid var(--sp-accent);
|
||||||
border-radius: 8px;
|
border-radius: var(--sp-dialog-radius);
|
||||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.55), 0 2px 8px rgba(0, 0, 0, 0.35),
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
|
||||||
|
|
||||||
/* Ensure Director's Board appears above the video strip */
|
/* Ensure Director's Board appears above the video strip */
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
@@ -40,13 +39,13 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
cursor: grab;
|
cursor: grab;
|
||||||
color: var(--sp-text-muted, hsl(0, 0%, 70%));
|
color: var(--sp-text-muted);
|
||||||
opacity: 0.35;
|
opacity: 0.35;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
transition: opacity 0.15s, background 0.15s;
|
transition: opacity 0.15s, background 0.15s;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
border-radius: 8px 8px 0 0;
|
border-radius: var(--sp-dialog-radius) var(--sp-dialog-radius) 0 0;
|
||||||
|
|
||||||
&:hover { opacity: 0.8; background: rgba(255, 255, 255, 0.03); }
|
&:hover { opacity: 0.8; background: rgba(255, 255, 255, 0.03); }
|
||||||
&:active { cursor: grabbing; opacity: 1; }
|
&:active { cursor: grabbing; opacity: 1; }
|
||||||
@@ -67,7 +66,7 @@
|
|||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--sp-text-muted);
|
color: var(--sp-text-muted);
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: var(--sp-radius-sm, 3px);
|
border-radius: var(--sp-radius-sm);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
transition: opacity 0.15s, background 0.15s, color 0.15s;
|
transition: opacity 0.15s, background 0.15s, color 0.15s;
|
||||||
@@ -107,7 +106,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
padding: 4px 8px;
|
padding: 5px 8px;
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -117,31 +116,43 @@
|
|||||||
.directors-board__bulk-btn {
|
.directors-board__bulk-btn {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 4px;
|
gap: var(--sp-btn-gap, 6px);
|
||||||
font-size: 11px;
|
padding: var(--sp-btn-padding-sm, 4px 10px);
|
||||||
background: rgba(74, 111, 156, 0.7);
|
font-size: var(--sp-btn-font-size-sm, 11px);
|
||||||
color: #e8edf2;
|
font-weight: 600;
|
||||||
border: 1px solid rgba(74, 111, 156, 0.4);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
border-radius: 3px;
|
|
||||||
padding: 3px 8px;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background 0.15s, opacity 0.15s;
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
|
line-height: 1.2;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
i { font-size: 10px; }
|
i { font-size: 10px; pointer-events: none; }
|
||||||
|
|
||||||
&:hover { background: rgba(74, 111, 156, 0.95); }
|
// Primary (show/hide) — green
|
||||||
|
background: rgba(74, 158, 107, 0.75);
|
||||||
|
color: #e8f0ea;
|
||||||
|
border-color: rgba(74, 158, 107, 0.4);
|
||||||
|
|
||||||
|
&:hover { background: rgba(74, 158, 107, 0.95); }
|
||||||
&:active { opacity: 0.8; }
|
&:active { opacity: 0.8; }
|
||||||
|
|
||||||
|
// Undo — neutral
|
||||||
&--undo {
|
&--undo {
|
||||||
background: transparent;
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
color: var(--sp-text-muted);
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
&:hover { color: var(--sp-text-primary, #dde2e8); border-color: rgba(255,255,255,0.25); background: rgba(255,255,255,0.05); }
|
&:hover {
|
||||||
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
|
border-color: rgba(255, 255, 255, 0.25);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restore spotlight — purple (distinct semantic)
|
||||||
&--restore {
|
&--restore {
|
||||||
background: rgba(123, 79, 166, 0.7);
|
background: rgba(123, 79, 166, 0.75);
|
||||||
border-color: rgba(123, 79, 166, 0.4);
|
border-color: rgba(123, 79, 166, 0.4);
|
||||||
&:hover { background: rgba(123, 79, 166, 0.95); }
|
&:hover { background: rgba(123, 79, 166, 0.95); }
|
||||||
}
|
}
|
||||||
@@ -150,8 +161,8 @@
|
|||||||
// ── Help / shortcut-panel button ───────────────────────────────────────────
|
// ── Help / shortcut-panel button ───────────────────────────────────────────
|
||||||
.directors-board__help-btn {
|
.directors-board__help-btn {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
width: 20px;
|
width: 22px;
|
||||||
height: 20px;
|
height: 22px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border: 1px solid rgba(255, 255, 255, 0.15);
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||||
background: transparent;
|
background: transparent;
|
||||||
@@ -164,31 +175,36 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
&:hover { background: rgba(74, 111, 156, 0.8); color: #fff; border-color: transparent; }
|
&:hover {
|
||||||
|
background: rgba(74, 158, 107, 0.8);
|
||||||
|
color: #fff;
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Footer (preset actions) ────────────────────────────────────────────────
|
// ── Footer (preset actions) ────────────────────────────────────────────────
|
||||||
.directors-board__footer {
|
.directors-board__footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 3px;
|
gap: 4px;
|
||||||
padding: 5px 8px 6px;
|
padding: 6px 8px 8px;
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
background: rgba(0, 0, 0, 0.2);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
border-radius: 0 0 8px 8px;
|
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
.directors-board__footer-group {
|
.directors-board__footer-group {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 3px;
|
gap: 4px;
|
||||||
|
|
||||||
&--presets { flex-wrap: wrap; }
|
&--presets { flex-wrap: wrap; }
|
||||||
|
|
||||||
&--controls {
|
&--controls {
|
||||||
padding-top: 3px;
|
padding-top: 4px;
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -206,21 +222,26 @@
|
|||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 4px;
|
gap: var(--sp-btn-gap, 6px);
|
||||||
font-size: 10px;
|
padding: var(--sp-btn-padding-sm, 4px 10px);
|
||||||
background: rgba(74, 111, 156, 0.65);
|
font-size: var(--sp-btn-font-size-sm, 11px);
|
||||||
color: #d8e4f0;
|
font-weight: 600;
|
||||||
border: 1px solid rgba(74, 111, 156, 0.35);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
border-radius: 3px;
|
|
||||||
padding: 4px 6px;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background 0.15s, opacity 0.15s;
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
line-height: 1.2;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
i { font-size: 0.9em; }
|
i { font-size: 0.9em; pointer-events: none; }
|
||||||
|
|
||||||
&:hover { background: rgba(74, 111, 156, 0.9); }
|
// Default — green primary
|
||||||
&:active { opacity: 0.75; }
|
background: rgba(74, 158, 107, 0.7);
|
||||||
|
color: #e8f0ea;
|
||||||
|
border-color: rgba(74, 158, 107, 0.35);
|
||||||
|
|
||||||
|
&:hover { background: rgba(74, 158, 107, 0.9); color: #fff; }
|
||||||
|
&:active { opacity: 0.8; }
|
||||||
|
|
||||||
&[disabled] {
|
&[disabled] {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
@@ -230,39 +251,57 @@
|
|||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Secondary — neutral
|
||||||
&--secondary {
|
&--secondary {
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
color: var(--sp-text-secondary, #9aa4b0);
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
&:hover { background: rgba(255, 255, 255, 0.1); color: #dde2e8; }
|
font-weight: 500;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auto-apply toggle — neutral (same as secondary)
|
||||||
&--auto-apply {
|
&--auto-apply {
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
color: var(--sp-text-secondary, #9aa4b0);
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
&:hover { background: rgba(255, 255, 255, 0.1); color: #dde2e8; }
|
font-weight: 500;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AV mode — neutral-muted
|
||||||
&--av {
|
&--av {
|
||||||
background: rgba(30, 35, 45, 0.8);
|
background: rgba(30, 35, 45, 0.8);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
color: var(--sp-text-muted, #aaa);
|
color: var(--sp-text-muted);
|
||||||
|
font-weight: 500;
|
||||||
&:hover { background: rgba(50, 55, 70, 0.9); }
|
&:hover { background: rgba(50, 55, 70, 0.9); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AV mode active — red tone
|
||||||
&--av-active {
|
&--av-active {
|
||||||
background: rgba(90, 42, 42, 0.85);
|
background: rgba(90, 42, 42, 0.85);
|
||||||
border-color: rgba(160, 64, 64, 0.6);
|
border-color: rgba(160, 64, 64, 0.6);
|
||||||
color: #f0a0a0;
|
color: #f0a0a0;
|
||||||
|
font-weight: 500;
|
||||||
&:hover { background: rgba(110, 50, 50, 0.95); }
|
&:hover { background: rgba(110, 50, 50, 0.95); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AV config — icon-only
|
||||||
&--av-config {
|
&--av-config {
|
||||||
background: rgba(30, 35, 45, 0.8);
|
background: rgba(30, 35, 45, 0.8);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
color: var(--sp-text-muted, #aaa);
|
color: var(--sp-text-muted);
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
|
font-weight: 500;
|
||||||
&:hover { background: rgba(50, 55, 70, 0.9); }
|
&:hover { background: rgba(50, 55, 70, 0.9); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,7 +319,7 @@
|
|||||||
|
|
||||||
.directors-board__dock-layout-label {
|
.directors-board__dock-layout-label {
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
color: var(--sp-text-muted);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.04em;
|
letter-spacing: 0.04em;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
@@ -312,9 +351,9 @@
|
|||||||
gap: 1px;
|
gap: 1px;
|
||||||
background: rgba(255, 255, 255, 0.04);
|
background: rgba(255, 255, 255, 0.04);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 3px;
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--sp-text-muted, hsl(0, 0%, 65%));
|
color: var(--sp-text-muted);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
|
|
||||||
@@ -322,14 +361,14 @@
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(255, 255, 255, 0.1);
|
||||||
color: var(--sp-text-primary, #dde2e8);
|
color: var(--sp-text-primary);
|
||||||
border-color: rgba(255, 255, 255, 0.2);
|
border-color: rgba(255, 255, 255, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.is-active {
|
&.is-active {
|
||||||
background: hsl(200, 50%, 25%);
|
background: rgba(74, 158, 107, 0.2);
|
||||||
border-color: hsl(200, 55%, 45%);
|
border-color: var(--sp-accent);
|
||||||
color: hsl(200, 80%, 75%);
|
color: var(--sp-accent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,4 +379,131 @@
|
|||||||
letter-spacing: 0.02em;
|
letter-spacing: 0.02em;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Tile shape selector bar ──────────────────────────────────────────────
|
||||||
|
.directors-board__tile-shape-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 5px 8px;
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||||
|
flex-shrink: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-shape-label {
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--sp-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-shape-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-border-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 5px 8px;
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||||
|
flex-shrink: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-border-label {
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--sp-text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-border-group {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-border-btn {
|
||||||
|
height: 24px;
|
||||||
|
min-width: 34px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: rgba(255, 255, 255, 0.04);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--sp-text-secondary, #7a8390);
|
||||||
|
font-size: 10px;
|
||||||
|
padding: 0 6px;
|
||||||
|
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
background: hsla(200, 70%, 55%, 0.2);
|
||||||
|
border-color: hsla(200, 70%, 55%, 0.6);
|
||||||
|
color: var(--sp-text-primary, #dde2e8);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover:not(.is-active) {
|
||||||
|
background: rgba(255, 255, 255, 0.08);
|
||||||
|
color: var(--sp-text-primary, #dde2e8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-border-color {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
padding: 0;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
background: none;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
&::-webkit-color-swatch-wrapper {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-color-swatch {
|
||||||
|
border: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.directors-board__tile-shape-btn {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: rgba(255, 255, 255, 0.04);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
color: var(--sp-text-muted);
|
||||||
|
padding: 0;
|
||||||
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
|
|
||||||
|
i { font-size: 11px; pointer-events: none; }
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
color: var(--sp-text-primary);
|
||||||
|
border-color: rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
background: rgba(74, 158, 107, 0.2);
|
||||||
|
border-color: var(--sp-accent);
|
||||||
|
color: var(--sp-accent);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,6 +130,29 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Shape variants (applied via .sp-shape-* on .participant-card) ─────────
|
||||||
|
.scrying-pool .participant-card {
|
||||||
|
&.sp-shape-rounded {
|
||||||
|
--sp-shape-clip: inset(0 round 6px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-circle {
|
||||||
|
--sp-shape-clip: circle(50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-hexagon {
|
||||||
|
--sp-shape-clip: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-octagon {
|
||||||
|
--sp-shape-clip: polygon(29% 0%, 71% 0%, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0% 71%, 0% 29%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.participant-card__avatar img {
|
||||||
|
clip-path: var(--sp-shape-clip, none);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ── Reduced motion ────────────────────────────────────────────────────────
|
// ── Reduced motion ────────────────────────────────────────────────────────
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
.scrying-pool .participant-card {
|
.scrying-pool .participant-card {
|
||||||
|
|||||||
@@ -11,9 +11,13 @@
|
|||||||
.scrying-pool {
|
.scrying-pool {
|
||||||
// Dialog root element
|
// Dialog root element
|
||||||
&.player-privacy-panel {
|
&.player-privacy-panel {
|
||||||
background: var(--sp-surface);
|
background: var(--sp-dialog-bg);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
font-family: var(--font-primary, inherit);
|
font-family: var(--font-primary, inherit);
|
||||||
|
border: var(--sp-dialog-border);
|
||||||
|
border-top: 2px solid var(--sp-accent);
|
||||||
|
border-radius: var(--sp-dialog-radius);
|
||||||
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Container
|
// Container
|
||||||
@@ -43,9 +47,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.player-privacy-panel__notice--readonly {
|
.player-privacy-panel__notice--readonly {
|
||||||
background: hsla(48, 88%, 55%, 0.10);
|
background: var(--sp-color-yellow-subtle);
|
||||||
color: hsl(48, 88%, 60%);
|
color: var(--sp-color-yellow);
|
||||||
border: 1px solid hsla(48, 88%, 55%, 0.25);
|
border: 1px solid var(--sp-color-yellow-subtle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Section
|
// Section
|
||||||
@@ -82,13 +86,13 @@
|
|||||||
// Individual effect card
|
// Individual effect card
|
||||||
.player-privacy-panel__effect {
|
.player-privacy-panel__effect {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 5px;
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
background: linear-gradient(135deg, hsl(215,25%,11%) 0%, hsl(215,22%,9%) 100%);
|
background: rgba(0, 0, 0, 0.15);
|
||||||
transition: border-color 120ms ease;
|
transition: border-color 120ms ease;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: var(--sp-border-hover, rgba(255,255,255,0.15));
|
border-color: rgba(255, 255, 255, 0.2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,11 +177,11 @@
|
|||||||
|
|
||||||
i { font-size: 9px; opacity: 0.7; }
|
i { font-size: 9px; opacity: 0.7; }
|
||||||
|
|
||||||
// Enabled state
|
// Enabled state — using accent green from SP tokens
|
||||||
.player-privacy-panel__toggle-input:checked + & {
|
.player-privacy-panel__toggle-input:checked + & {
|
||||||
background: rgba(46, 160, 67, 0.18);
|
background: var(--sp-color-green-subtle);
|
||||||
color: hsl(134, 61%, 60%);
|
color: var(--sp-color-green);
|
||||||
border-color: rgba(46, 160, 67, 0.4);
|
border-color: color-mix(in srgb, var(--sp-accent) 40%, transparent);
|
||||||
|
|
||||||
i { opacity: 1; }
|
i { opacity: 1; }
|
||||||
}
|
}
|
||||||
@@ -188,7 +192,7 @@
|
|||||||
}
|
}
|
||||||
.player-privacy-panel__toggle-input:checked + &:hover,
|
.player-privacy-panel__toggle-input:checked + &:hover,
|
||||||
.player-privacy-panel__toggle-label:hover .player-privacy-panel__toggle-input:checked + & {
|
.player-privacy-panel__toggle-label:hover .player-privacy-panel__toggle-input:checked + & {
|
||||||
background: rgba(46, 160, 67, 0.25);
|
background: color-mix(in srgb, var(--sp-accent) 25%, transparent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,10 +207,10 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: 80px;
|
width: 80px;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
border: 2px solid var(--sp-border);
|
border: 2px solid rgba(255, 255, 255, 0.12);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: hsl(215,25%,11%);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -227,19 +231,45 @@
|
|||||||
|
|
||||||
.player-privacy-panel__portrait-choose,
|
.player-privacy-panel__portrait-choose,
|
||||||
.player-privacy-panel__portrait-remove {
|
.player-privacy-panel__portrait-remove {
|
||||||
font-size: 12px;
|
font-size: var(--sp-btn-font-size, 12px);
|
||||||
padding: 5px 10px;
|
padding: var(--sp-btn-padding-sm, 5px 10px);
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 5px;
|
gap: var(--sp-btn-gap, 6px);
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player-privacy-panel__portrait-choose {
|
||||||
|
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||||
|
color: var(--sp-btn-primary-text, #fff);
|
||||||
|
|
||||||
|
&:hover { background: var(--sp-btn-primary-hover, var(--sp-accent-hover)); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.player-privacy-panel__portrait-remove {
|
||||||
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GM Privacy Selector dialog
|
// GM Privacy Selector dialog
|
||||||
&.gm-privacy-selector-dialog {
|
&.gm-privacy-selector-dialog {
|
||||||
background: var(--sp-surface);
|
background: var(--sp-dialog-bg);
|
||||||
border: 1px solid var(--sp-border);
|
border: var(--sp-dialog-border);
|
||||||
border-radius: 6px;
|
border-top: 2px solid var(--sp-accent);
|
||||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
|
border-radius: var(--sp-dialog-radius);
|
||||||
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
min-width: 320px;
|
min-width: 320px;
|
||||||
max-width: 480px;
|
max-width: 480px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -248,7 +278,6 @@
|
|||||||
.sp-gm-privacy-selector {
|
.sp-gm-privacy-selector {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: var(--sp-surface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-dialog-header {
|
.sp-dialog-header {
|
||||||
@@ -256,8 +285,8 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 10px 14px;
|
padding: 10px 14px;
|
||||||
border-bottom: 1px solid var(--sp-border);
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
background: var(--sp-surface-raised);
|
background: rgba(0, 0, 0, 0.15);
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -292,8 +321,7 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: var(--sp-text-secondary);
|
color: var(--sp-text-secondary);
|
||||||
background: var(--sp-surface);
|
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
||||||
border-bottom: 1px solid var(--sp-border);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-user-list {
|
.sp-user-list {
|
||||||
@@ -301,7 +329,6 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
background: var(--sp-surface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-user-item {
|
.sp-user-item {
|
||||||
@@ -309,14 +336,14 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 7px 12px;
|
padding: 7px 12px;
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 4px;
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
background: linear-gradient(135deg, hsl(215,25%,11%) 0%, hsl(215,22%,9%) 100%);
|
background: rgba(0, 0, 0, 0.15);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background 120ms ease, border-color 120ms ease;
|
transition: background 120ms ease, border-color 120ms ease;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: hsl(215,25%,14%);
|
background: rgba(0, 0, 0, 0.25);
|
||||||
border-color: var(--sp-accent);
|
border-color: var(--sp-accent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -332,7 +359,7 @@
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: var(--sp-text-secondary);
|
color: var(--sp-text-secondary);
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background: rgba(255, 255, 255, 0.04);
|
background: rgba(255, 255, 255, 0.04);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
|
|||||||
@@ -16,8 +16,12 @@
|
|||||||
|
|
||||||
.scrying-pool.dialog.preset-export,
|
.scrying-pool.dialog.preset-export,
|
||||||
.scrying-pool.dialog.preset-import {
|
.scrying-pool.dialog.preset-import {
|
||||||
background: var(--sp-surface);
|
background: var(--sp-dialog-bg);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
|
border: var(--sp-dialog-border);
|
||||||
|
border-top: 2px solid var(--sp-accent);
|
||||||
|
border-radius: var(--sp-dialog-radius);
|
||||||
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
|
|
||||||
.sp-dialog-content {
|
.sp-dialog-content {
|
||||||
padding: var(--sp-space-m);
|
padding: var(--sp-space-m);
|
||||||
@@ -29,8 +33,9 @@
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
gap: var(--sp-space-xs);
|
gap: var(--sp-space-xs);
|
||||||
padding: var(--sp-space-m);
|
padding: var(--sp-space-m);
|
||||||
border-top: 1px solid var(--sp-border);
|
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
background: var(--sp-surface);
|
background: rgba(0, 0, 0, 0.15);
|
||||||
|
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Description text
|
// Description text
|
||||||
@@ -89,61 +94,66 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Buttons
|
// Buttons — using shared SP button tokens
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
.sp-btn {
|
.sp-btn {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: var(--sp-space-xs);
|
gap: var(--sp-btn-gap, 6px);
|
||||||
padding: var(--sp-space-xs) var(--sp-space-m);
|
padding: var(--sp-btn-padding, 7px 14px);
|
||||||
border: none;
|
border: 1px solid transparent;
|
||||||
border-radius: var(--sp-radius-sm);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
font-size: var(--sp-font-size-sm);
|
font-size: var(--sp-btn-font-size, 12px);
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.15s ease;
|
transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
|
||||||
|
line-height: 1.2;
|
||||||
|
|
||||||
&:disabled {
|
&:disabled {
|
||||||
opacity: 0.5;
|
opacity: 0.45;
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
i {
|
i {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-btn-primary {
|
.sp-btn-primary {
|
||||||
background: var(--sp-accent);
|
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||||
color: var(--sp-accent-text);
|
color: var(--sp-btn-primary-text, #fff);
|
||||||
|
|
||||||
&:hover:not(:disabled) {
|
&:hover:not(:disabled) {
|
||||||
background: var(--sp-accent-hover);
|
background: var(--sp-btn-primary-hover, var(--sp-accent-hover));
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active:not(:disabled) {
|
&:active:not(:disabled) {
|
||||||
background: var(--sp-accent-active);
|
background: var(--sp-btn-primary-active, var(--sp-accent-active));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-btn-secondary {
|
.sp-btn-secondary {
|
||||||
background: var(--sp-surface-subtle);
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
border: 1px solid var(--sp-border);
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
&:hover:not(:disabled) {
|
&:hover:not(:disabled) {
|
||||||
background: var(--sp-surface);
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-btn-danger {
|
.sp-btn-danger {
|
||||||
background: var(--sp-color-red);
|
background: var(--sp-btn-danger-bg, var(--sp-color-red));
|
||||||
color: white;
|
color: var(--sp-btn-danger-text, #fff);
|
||||||
|
|
||||||
&:hover:not(:disabled) {
|
&:hover:not(:disabled) {
|
||||||
background: var(--sp-color-red-dark);
|
background: var(--sp-btn-danger-hover, var(--sp-color-red-dark));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,17 +183,17 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: var(--sp-space-xs);
|
gap: var(--sp-space-xs);
|
||||||
padding: var(--sp-space-sm) var(--sp-space-m);
|
padding: var(--sp-space-sm) var(--sp-space-m);
|
||||||
background: var(--sp-surface-subtle);
|
background: rgba(255, 255, 255, 0.04);
|
||||||
border: 1px dashed var(--sp-border);
|
border: 1px dashed rgba(255, 255, 255, 0.2);
|
||||||
border-radius: var(--sp-radius-sm);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--sp-text-secondary);
|
color: var(--sp-text-secondary);
|
||||||
transition: all 0.15s ease;
|
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: var(--sp-accent);
|
border-color: var(--sp-accent);
|
||||||
color: var(--sp-accent);
|
color: var(--sp-accent);
|
||||||
background: var(--sp-surface);
|
background: rgba(255, 255, 255, 0.06);
|
||||||
}
|
}
|
||||||
|
|
||||||
i {
|
i {
|
||||||
@@ -222,12 +232,12 @@
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
gap: var(--sp-space-sm);
|
gap: var(--sp-space-sm);
|
||||||
padding: var(--sp-space-xs) var(--sp-space-sm);
|
padding: var(--sp-space-xs) var(--sp-space-sm);
|
||||||
border-radius: var(--sp-radius-sm);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background 0.15s ease;
|
transition: background 0.15s ease;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--sp-surface-subtle);
|
background: rgba(255, 255, 255, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="radio"] {
|
input[type="radio"] {
|
||||||
@@ -273,9 +283,9 @@
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: var(--sp-radius-sm);
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
background: var(--sp-surface);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-preview-item {
|
.sp-preview-item {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
.scrying-pool.preset-load-dialog {
|
.scrying-pool.preset-load-dialog {
|
||||||
background: var(--sp-surface);
|
background: var(--sp-dialog-bg);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
|
border: var(--sp-dialog-border);
|
||||||
|
border-top: 2px solid var(--sp-accent);
|
||||||
|
border-radius: var(--sp-dialog-radius);
|
||||||
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
|
|
||||||
// ── Content wrapper ────────────────────────────────────────────────────
|
// ── Content wrapper ────────────────────────────────────────────────────
|
||||||
.preset-load-dialog__content {
|
.preset-load-dialog__content {
|
||||||
@@ -47,24 +51,26 @@
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
border-radius: 4px;
|
border-radius: var(--sp-btn-radius);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: background-color 0.15s, border-color 0.15s;
|
transition: background-color 0.15s, border-color 0.15s, color 0.15s;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
line-height: 1.2;
|
||||||
|
|
||||||
i { font-size: 0.85em; opacity: 0.7; flex-shrink: 0; }
|
i { font-size: 0.85em; opacity: 0.7; flex-shrink: 0; }
|
||||||
|
|
||||||
// Load button — styled as a row item, not a loud primary button
|
// Load button — green accent on hover
|
||||||
&--load {
|
&--load {
|
||||||
background: var(--sp-surface-elevated, rgba(255,255,255,0.06));
|
background: rgba(255, 255, 255, 0.04);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--sp-accent, #4a6f9c);
|
background: rgba(74, 158, 107, 0.85);
|
||||||
border-color: var(--sp-accent, #4a6f9c);
|
border-color: var(--sp-accent);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
i { opacity: 1; }
|
i { opacity: 1; }
|
||||||
}
|
}
|
||||||
@@ -75,8 +81,9 @@
|
|||||||
&--cancel {
|
&--cancel {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--sp-text-muted);
|
color: var(--sp-text-muted);
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
&:hover { color: var(--sp-text, inherit); border-color: currentColor; }
|
font-weight: 500;
|
||||||
|
&:hover { color: var(--sp-text-primary); border-color: rgba(255,255,255,0.25); background: rgba(255,255,255,0.05); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +93,9 @@
|
|||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding: 10px 12px;
|
padding: 10px 12px;
|
||||||
border-top: 1px solid var(--sp-border);
|
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
|
background: rgba(0, 0, 0, 0.15);
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,12 @@
|
|||||||
@import "../tokens/_base.less";
|
@import "../tokens/_base.less";
|
||||||
|
|
||||||
.scrying-pool.preset-save-dialog {
|
.scrying-pool.preset-save-dialog {
|
||||||
background: linear-gradient(175deg, hsl(220, 18%, 13%) 0%, hsl(220, 15%, 10%) 100%);
|
background: var(--sp-dialog-bg);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
border: var(--sp-dialog-border);
|
||||||
border-top: 2px solid var(--sp-accent);
|
border-top: 2px solid var(--sp-accent);
|
||||||
border-radius: 8px;
|
border-radius: var(--sp-dialog-radius);
|
||||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.55), 0 2px 8px rgba(0, 0, 0, 0.35),
|
box-shadow: var(--sp-dialog-shadow);
|
||||||
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
|
||||||
|
|
||||||
// ── Form wrapper ──────────────────────────────────────────────────────────
|
// ── Form wrapper ──────────────────────────────────────────────────────────
|
||||||
.preset-save-dialog__form {
|
.preset-save-dialog__form {
|
||||||
@@ -77,7 +76,7 @@
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding: 9px 12px;
|
padding: 9px 12px;
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid var(--sp-border);
|
||||||
border-radius: 5px;
|
border-radius: var(--sp-btn-radius);
|
||||||
background: var(--sp-control-bg, #1a1d20);
|
background: var(--sp-control-bg, #1a1d20);
|
||||||
color: var(--sp-text-primary);
|
color: var(--sp-text-primary);
|
||||||
outline: none;
|
outline: none;
|
||||||
@@ -103,47 +102,49 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding: 10px 16px;
|
padding: 10px 16px;
|
||||||
border-top: 1px solid var(--sp-border);
|
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
background: rgba(0, 0, 0, 0.15);
|
background: rgba(0, 0, 0, 0.15);
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Button styles — using shared SP tokens
|
||||||
.preset-save-dialog__btn {
|
.preset-save-dialog__btn {
|
||||||
font-family: var(--font-primary, ui-sans-serif, system-ui, sans-serif);
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
padding: 7px 14px;
|
|
||||||
border-radius: 5px;
|
|
||||||
cursor: pointer;
|
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 6px;
|
gap: var(--sp-btn-gap, 6px);
|
||||||
transition: background 0.15s, border-color 0.15s, opacity 0.15s;
|
padding: var(--sp-btn-padding, 7px 14px);
|
||||||
|
font-family: var(--font-primary, ui-sans-serif, system-ui, sans-serif);
|
||||||
|
font-size: var(--sp-btn-font-size, 12px);
|
||||||
|
font-weight: 600;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-radius: var(--sp-btn-radius, 5px);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
|
||||||
|
line-height: 1.2;
|
||||||
|
|
||||||
i { font-size: 10px; opacity: 0.85; }
|
i { font-size: 10px; pointer-events: none; }
|
||||||
|
|
||||||
&--save {
|
&--save {
|
||||||
background: var(--sp-accent);
|
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||||
color: var(--sp-accent-text, #fff);
|
color: var(--sp-btn-primary-text, #fff);
|
||||||
border: 1px solid transparent;
|
|
||||||
letter-spacing: 0.02em;
|
letter-spacing: 0.02em;
|
||||||
|
|
||||||
&:hover { background: var(--sp-accent-hover); }
|
&:hover { background: var(--sp-btn-primary-hover, var(--sp-accent-hover)); }
|
||||||
&:active { background: var(--sp-accent-active); }
|
&:active { background: var(--sp-btn-primary-active, var(--sp-accent-active)); }
|
||||||
|
|
||||||
i { opacity: 1; }
|
i { opacity: 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
&--cancel {
|
&--cancel {
|
||||||
background: transparent;
|
background: var(--sp-btn-secondary-bg, rgba(255,255,255,0.05));
|
||||||
color: var(--sp-text-secondary);
|
color: var(--sp-btn-secondary-text, var(--sp-text-secondary));
|
||||||
border: 1px solid var(--sp-border);
|
border-color: var(--sp-btn-secondary-border, rgba(255,255,255,0.12));
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--sp-text-primary);
|
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||||
border-color: rgba(255, 255, 255, 0.2);
|
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,8 +23,16 @@
|
|||||||
// WARNING: do NOT add max-width or overflow here; the outer window also carries this class
|
// WARNING: do NOT add max-width or overflow here; the outer window also carries this class
|
||||||
// and would clip the expanded inner content.
|
// and would clip the expanded inner content.
|
||||||
.scrying-pool-strip {
|
.scrying-pool-strip {
|
||||||
background: var(--sp-bg, hsl(220, 15%, 12%));
|
background: rgba(0, 0, 0, 0.01);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
transition: background 0.25s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override FoundryVTT v14's .application min-width: 200px — strip sizing is controlled by JS */
|
||||||
|
min-width: unset;
|
||||||
|
|
||||||
/* Ensure strip appears below Director's Board (z-index: 100) */
|
/* Ensure strip appears below Director's Board (z-index: 100) */
|
||||||
z-index: 50;
|
z-index: 50;
|
||||||
@@ -46,14 +54,10 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
max-width: 83px;
|
max-width: calc(var(--sp-widget-width, 83px) + 11px);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: max-width 200ms ease-in-out;
|
transition: max-width 200ms ease-in-out;
|
||||||
|
|
||||||
&.is-expanded {
|
|
||||||
max-width: 240px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Horizontal and mosaic layouts: width is controlled by JS setPosition
|
// Horizontal and mosaic layouts: width is controlled by JS setPosition
|
||||||
&.sp-layout-horizontal-sm,
|
&.sp-layout-horizontal-sm,
|
||||||
&.sp-layout-horizontal-md,
|
&.sp-layout-horizontal-md,
|
||||||
@@ -100,18 +104,16 @@
|
|||||||
.scrying-pool.scrying-pool-strip.sp-layout-horizontal-md,
|
.scrying-pool.scrying-pool-strip.sp-layout-horizontal-md,
|
||||||
.scrying-pool.scrying-pool-strip.sp-layout-mosaic-md {
|
.scrying-pool.scrying-pool-strip.sp-layout-mosaic-md {
|
||||||
.sp-participant-avatar {
|
.sp-participant-avatar {
|
||||||
width: 150px;
|
width: var(--sp-widget-width, 150px);
|
||||||
height: 150px;
|
height: var(--sp-widget-width, 150px);
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 8px 4px 4px;
|
padding: 8px 4px 4px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
|
||||||
.sp-avatar__img {
|
.sp-avatar__shell {
|
||||||
width: 91px;
|
width: calc(var(--sp-widget-width, 150px) - 59px);
|
||||||
height: 91px;
|
height: calc(var(--sp-widget-width, 150px) - 59px);
|
||||||
border-radius: 6px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-avatar__name {
|
.sp-avatar__name {
|
||||||
@@ -134,66 +136,63 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Drag grip (top bar, replaces window header drag affordance) ────────────────
|
// ── Small tile shell sizing (all S layouts) ─────────────────────────────────
|
||||||
.sp-strip__grip {
|
// Base .sp-avatar__shell is 60×60 fixed — override to follow --sp-widget-width
|
||||||
width: 100%;
|
.scrying-pool.scrying-pool-strip.sp-layout-vertical-sm,
|
||||||
height: 16px;
|
.scrying-pool.scrying-pool-strip.sp-layout-horizontal-sm,
|
||||||
display: flex;
|
.scrying-pool.scrying-pool-strip.sp-layout-mosaic-sm {
|
||||||
align-items: center;
|
.sp-participant-avatar .sp-avatar__shell {
|
||||||
justify-content: center;
|
width: calc(var(--sp-widget-width) - 12px);
|
||||||
cursor: grab;
|
height: calc(var(--sp-widget-width) - 12px);
|
||||||
color: var(--sp-text, hsl(0, 0%, 80%));
|
}
|
||||||
opacity: 0.35;
|
|
||||||
font-size: 10px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
transition: opacity 0.15s;
|
|
||||||
user-select: none;
|
|
||||||
|
|
||||||
&:hover { opacity: 0.75; }
|
|
||||||
&:active { cursor: grabbing; opacity: 1; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Lightweight close button (replaces window header) ─────────────────────────
|
// ── Toolbar: grip + toggle + DB + close on one line ─────────────────────────
|
||||||
.sp-strip__close-btn {
|
// All chrome lives here; hidden at rest, revealed on strip hover.
|
||||||
position: absolute;
|
|
||||||
top: 4px;
|
|
||||||
right: 4px;
|
|
||||||
z-index: 10;
|
|
||||||
width: 18px;
|
|
||||||
height: 18px;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 18px;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 400;
|
|
||||||
background: transparent;
|
|
||||||
color: var(--sp-text, hsl(0, 0%, 80%));
|
|
||||||
border: none;
|
|
||||||
border-radius: 3px;
|
|
||||||
cursor: pointer;
|
|
||||||
opacity: 0.45;
|
|
||||||
transition: opacity 0.15s, background 0.15s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 1;
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
&:active { opacity: 0.75; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// ── Toolbar row: toggle + Director's Board on the same line ───────────────────
|
|
||||||
.sp-strip__toolbar {
|
.sp-strip__toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 24px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
|
||||||
|
.scrying-pool-strip:hover & {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Drag grip — compact icon handle
|
||||||
|
.sp-strip__grip {
|
||||||
|
width: 20px;
|
||||||
|
height: 24px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: grab;
|
||||||
|
color: var(--sp-text, hsl(0, 0%, 80%));
|
||||||
|
font-size: 10px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
&:active { cursor: grabbing; }
|
||||||
|
|
||||||
|
.scrying-pool-strip:hover & {
|
||||||
|
opacity: 0.45;
|
||||||
|
&:hover { opacity: 0.75; }
|
||||||
|
&:active { opacity: 1; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle (expand/collapse)
|
||||||
.sp-strip__toggle {
|
.sp-strip__toggle {
|
||||||
width: 83px;
|
height: 24px;
|
||||||
min-width: 83px;
|
min-width: 22px;
|
||||||
height: 28px;
|
width: 22px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -201,34 +200,27 @@
|
|||||||
border: none;
|
border: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--sp-text, hsl(0, 0%, 80%));
|
color: var(--sp-text, hsl(0, 0%, 80%));
|
||||||
font-size: 11px;
|
font-size: 10px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
|
|
||||||
&:hover { opacity: 1; }
|
&:hover { opacity: 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Director's Board CTA button (shown when sidebar injection not available) ──
|
// Director's Board CTA button
|
||||||
.sp-strip__directors-board-cta {
|
.sp-strip__directors-board-cta {
|
||||||
flex: 1;
|
width: 22px;
|
||||||
min-width: 0;
|
height: 24px;
|
||||||
height: 28px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 6px;
|
justify-content: center;
|
||||||
padding: 0 8px;
|
flex-shrink: 0;
|
||||||
background: none;
|
background: none;
|
||||||
border: none;
|
border: none;
|
||||||
border-left: 1px solid rgba(255, 255, 255, 0.06);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: var(--sp-text-secondary, #7a8390);
|
color: var(--sp-text-secondary, #7a8390);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
text-align: left;
|
|
||||||
transition: background 0.15s, color 0.15s;
|
transition: background 0.15s, color 0.15s;
|
||||||
flex-shrink: 0;
|
|
||||||
|
|
||||||
i { font-size: 12px; flex-shrink: 0; }
|
|
||||||
span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: rgba(255, 255, 255, 0.06);
|
background: rgba(255, 255, 255, 0.06);
|
||||||
@@ -236,6 +228,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Spacer — pushes close button to the right
|
||||||
|
.sp-strip__toolbar-spacer {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close button — in-toolbar, no longer absolutely positioned
|
||||||
|
.sp-strip__close-btn {
|
||||||
|
width: 20px;
|
||||||
|
height: 24px;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 24px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 400;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--sp-text, hsl(0, 0%, 80%));
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
flex-shrink: 0;
|
||||||
|
opacity: 0.45;
|
||||||
|
transition: opacity 0.2s, background 0.15s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
&:active { opacity: 0.75; }
|
||||||
|
}
|
||||||
|
|
||||||
.sp-strip__participants {
|
.sp-strip__participants {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -255,6 +276,12 @@
|
|||||||
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
|
||||||
|
.scrying-pool-strip:hover & {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
@@ -263,7 +290,7 @@
|
|||||||
.sp-participant-avatar {
|
.sp-participant-avatar {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 83px;
|
width: 83px;
|
||||||
height: 83px;
|
height: var(--sp-widget-width, 83px);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
@@ -281,52 +308,30 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.is-expanded & {
|
.is-expanded & {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 135px; // 16:9 at 240 px strip width
|
height: auto;
|
||||||
padding: 0;
|
padding: 5px;
|
||||||
align-items: flex-end;
|
background: transparent;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
background: hsl(220, 15%, 14%);
|
background: hsl(220, 15%, 14%);
|
||||||
|
|
||||||
// Gradient scrim so name text is legible over any video
|
|
||||||
&::after {
|
|
||||||
content: '';
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: 48px;
|
|
||||||
background: linear-gradient(transparent, hsla(0, 0%, 0%, 0.72));
|
|
||||||
z-index: 2;
|
|
||||||
pointer-events: none;
|
|
||||||
border-radius: 0 0 4px 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-avatar__img {
|
&::after { display: none; }
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
// Shell: sized to widget width, centered in the card
|
||||||
left: 50%;
|
.sp-avatar__shell {
|
||||||
transform: translate(-50%, -50%);
|
width: calc(var(--sp-widget-width) - 59px);
|
||||||
z-index: 1;
|
height: calc(var(--sp-widget-width) - 59px);
|
||||||
width: 48px;
|
|
||||||
height: 48px;
|
|
||||||
border-radius: 6px; // card view — rectangular
|
|
||||||
}
|
|
||||||
|
|
||||||
.sp-avatar__name {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 20px;
|
|
||||||
left: 8px;
|
|
||||||
right: 8px;
|
|
||||||
z-index: 3;
|
|
||||||
color: hsl(0, 0%, 95%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// No names displayed in vertical mode
|
||||||
|
.sp-avatar__name,
|
||||||
.sp-avatar__state-label {
|
.sp-avatar__state-label {
|
||||||
position: absolute;
|
display: none;
|
||||||
bottom: 6px;
|
|
||||||
left: 8px;
|
|
||||||
z-index: 3;
|
|
||||||
color: hsla(0, 0%, 85%, 0.85);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-avatar__corner-badge {
|
.sp-avatar__corner-badge {
|
||||||
@@ -339,23 +344,86 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video container for WebRTC stream (full AV replacement mode)
|
// Border shell — no clip-path, no background. Serves only as the positioning
|
||||||
.sp-participant-video {
|
// parent for ::before (border), ::after (state ring), and .sp-avatar__shape (content).
|
||||||
|
// Border and ring use the SAME clip-path as the shape but are scaled up via
|
||||||
|
// negative inset, creating a genuine border/ring around the clipped shape.
|
||||||
|
.sp-avatar__shell {
|
||||||
|
position: relative;
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
// Default sm size — overridden by layout-specific CSS
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tile border — ::before with same clip-path as shape, scaled up by border-width.
|
||||||
|
// Hidden via opacity when --sp-tile-border-active is 0 (border-width = 0)
|
||||||
|
// so the border background doesn't bleed through transparent avatar areas.
|
||||||
|
.sp-avatar__shell::before {
|
||||||
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
inset: 0;
|
inset: calc(var(--sp-tile-border-width, 0px) * -1);
|
||||||
|
background: var(--sp-tile-border-color, transparent);
|
||||||
|
clip-path: var(--sp-shape-clip, none);
|
||||||
|
opacity: var(--sp-tile-border-active, 1);
|
||||||
|
z-index: -3;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// State ring — ::after with same clip-path, scaled up same as border.
|
||||||
|
// Uses inset box-shadow so the ring appears INSIDE the clipped area,
|
||||||
|
// overlaying either the border (via ::before behind) or the avatar content.
|
||||||
|
// At z-index 1 it renders above .sp-avatar__shape so the ring is visible
|
||||||
|
// on top of the avatar video/img.
|
||||||
|
// Gated by --sp-tile-border-active alongside the border ::before so that
|
||||||
|
// "None" border truly removes ALL colored rings.
|
||||||
|
.sp-avatar__shell::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: calc(var(--sp-tile-border-width, 0px) * -1);
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: inset 0 0 0 2px transparent;
|
||||||
|
clip-path: var(--sp-shape-clip, none);
|
||||||
|
opacity: var(--sp-tile-border-active, 1);
|
||||||
|
z-index: 1;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: box-shadow 200ms ease, opacity 200ms ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shape wrapper inside the shell — carries clip-path for shapes.
|
||||||
|
.sp-avatar__shape {
|
||||||
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
z-index: 1;
|
clip-path: var(--sp-shape-clip, none);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inner content (img and video) fill the shape
|
||||||
|
.sp-avatar__shape .sp-avatar__img,
|
||||||
|
.sp-avatar__shape .sp-participant-video {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Video container for WebRTC stream (full AV replacement mode)
|
||||||
|
// Regular flow child inside .sp-avatar__shell — contributes to shell sizing
|
||||||
|
.sp-participant-video {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-avatar__img {
|
.sp-avatar__img {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
border-radius: 6px;
|
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
@@ -365,7 +433,6 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
border-radius: 6px;
|
|
||||||
background: hsl(220, 15%, 18%);
|
background: hsl(220, 15%, 18%);
|
||||||
|
|
||||||
.is-expanded & {
|
.is-expanded & {
|
||||||
@@ -398,48 +465,79 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
color: var(--sp-text, hsl(0, 0%, 85%));
|
color: var(--sp-text, hsl(0, 0%, 85%));
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
|
||||||
|
.sp-participant-avatar:hover & {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-avatar__state-label {
|
.sp-avatar__state-label {
|
||||||
font-size: 0.7rem;
|
font-size: 0.7rem;
|
||||||
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
|
||||||
|
.sp-participant-avatar:hover & {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// StateRing variants (applied as class on .sp-participant-avatar)
|
// StateRing variants (applied as class on .sp-participant-avatar)
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
// State ring via ::after on the shell — uses inset box-shadow so the ring
|
||||||
|
// follows the same clip-path as the shape, overlaying the border's inner edge.
|
||||||
|
// When there's no border (width=0), the ring overlays the avatar content edge.
|
||||||
.sp-participant-avatar.sp-state-active,
|
.sp-participant-avatar.sp-state-active,
|
||||||
.sp-participant-avatar.sp-state-self-muted {
|
.sp-participant-avatar.sp-state-self-muted {
|
||||||
--sp-state-color: var(--sp-state-active);
|
--sp-state-color: var(--sp-state-active);
|
||||||
|
|
||||||
.sp-avatar__img {
|
.sp-avatar__shell::after {
|
||||||
box-shadow: 0 0 0 2px var(--sp-state-color);
|
box-shadow: inset 0 0 0 2px var(--sp-state-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-participant-avatar.sp-state-hidden,
|
.sp-participant-avatar.sp-state-hidden,
|
||||||
.sp-participant-avatar.sp-state-cam-lost {
|
.sp-participant-avatar.sp-state-cam-lost {
|
||||||
--sp-state-color: var(--sp-state-hidden);
|
--sp-state-color: var(--sp-state-hidden);
|
||||||
|
|
||||||
.sp-avatar__img {
|
|
||||||
outline: 2px dashed var(--sp-state-color);
|
|
||||||
outline-offset: 2px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-participant-avatar.sp-state-pending {
|
.sp-participant-avatar.sp-state-pending {
|
||||||
--sp-state-color: var(--sp-state-pending);
|
--sp-state-color: var(--sp-state-pending);
|
||||||
|
|
||||||
.sp-avatar__img {
|
.sp-avatar__shell::after {
|
||||||
box-shadow: 0 0 0 2px var(--sp-state-color);
|
box-shadow: inset 0 0 0 2px var(--sp-state-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Spotlight focus state — gold ring (uses urgency-director token)
|
||||||
|
// ============================================================
|
||||||
|
.sp-participant-avatar.sp-state-focused {
|
||||||
|
.sp-avatar__shell::after {
|
||||||
|
box-shadow: inset 0 0 0 2px var(--sp-urgency-director);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Drag-and-drop reorder feedback
|
||||||
|
// ============================================================
|
||||||
|
.sp-strip__participant-item.sp-dragging {
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sp-strip__participant-item.sp-drag-over {
|
||||||
|
box-shadow: inset 0 0 0 2px var(--sp-urgency-director);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// StateRing animations — gated under no-preference (AC-16)
|
// StateRing animations — gated under no-preference (AC-16)
|
||||||
// ============================================================
|
// ============================================================
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
@media (prefers-reduced-motion: no-preference) {
|
||||||
.sp-participant-avatar.sp-state-pending .sp-avatar__img {
|
.sp-participant-avatar.sp-state-pending .sp-avatar__shell::after {
|
||||||
animation: sp-pulse 2s ease-in-out infinite;
|
animation: sp-pulse 2s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,13 +547,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Revert flash (200ms amber, then restore)
|
// Revert flash (200ms amber, then restore)
|
||||||
.sp-participant-avatar.sp-state-revert .sp-avatar__img {
|
.sp-participant-avatar.sp-state-revert .sp-avatar__shell::after {
|
||||||
animation: sp-revert-flash 200ms ease-out forwards;
|
animation: sp-revert-flash 200ms ease-out forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes sp-revert-flash {
|
@keyframes sp-revert-flash {
|
||||||
0% { box-shadow: 0 0 0 3px var(--sp-urgency-director); }
|
0% { box-shadow: inset 0 0 0 3px var(--sp-urgency-director); }
|
||||||
100% { box-shadow: 0 0 0 2px var(--sp-state-color); }
|
100% { box-shadow: inset 0 0 0 2px var(--sp-state-color); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,3 +689,30 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
// Tile shape variants (applied as .sp-shape-* on .sp-participant-avatar)
|
||||||
|
// ============================================================
|
||||||
|
// Defines --sp-shape-clip which is consumed by:
|
||||||
|
// - .sp-avatar__shape (content clip)
|
||||||
|
// - .sp-avatar__shell::before (border)
|
||||||
|
// - .sp-avatar__shell::after (state ring)
|
||||||
|
// All three use the same clip-path, but ::before and ::after are scaled up
|
||||||
|
// via negative inset to create the border/ring around the clipped shape.
|
||||||
|
.sp-participant-avatar {
|
||||||
|
&.sp-shape-rounded {
|
||||||
|
--sp-shape-clip: inset(0 round 6px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-circle {
|
||||||
|
--sp-shape-clip: circle(50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-hexagon {
|
||||||
|
--sp-shape-clip: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sp-shape-octagon {
|
||||||
|
--sp-shape-clip: polygon(29% 0%, 71% 0%, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0% 71%, 0% 29%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
// Panel container
|
// Panel container
|
||||||
.directors-board__preset-panel {
|
.directors-board__preset-panel {
|
||||||
background: linear-gradient(160deg, hsl(215,28%,13%) 0%, hsl(215,25%,10%) 100%);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
border-radius: 6px;
|
border-radius: var(--sp-dialog-radius);
|
||||||
padding: 10px 12px 12px;
|
padding: 10px 12px 12px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
|
||||||
@@ -116,8 +116,8 @@
|
|||||||
.directors-board__preset-panel-select {
|
.directors-board__preset-panel-select {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
background: var(--sp-surface);
|
background: rgba(0, 0, 0, 0.3);
|
||||||
border: 1px solid var(--sp-border);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
@import "tokens/_focus.less";
|
@import "tokens/_focus.less";
|
||||||
|
|
||||||
// ── Component styles ──────────────────────────────────────────────────────────
|
// ── Component styles ──────────────────────────────────────────────────────────
|
||||||
|
@import "components/_buttons.less";
|
||||||
@import "components/_participant-card.less";
|
@import "components/_participant-card.less";
|
||||||
@import "components/_roster-strip.less";
|
@import "components/_roster-strip.less";
|
||||||
@import "components/_directors-board.less";
|
@import "components/_directors-board.less";
|
||||||
|
|||||||
@@ -54,6 +54,39 @@
|
|||||||
--sp-radius-sm: 3px;
|
--sp-radius-sm: 3px;
|
||||||
--sp-radius-md: 4px;
|
--sp-radius-md: 4px;
|
||||||
|
|
||||||
|
/* Dialog surface */
|
||||||
|
--sp-dialog-bg: linear-gradient(175deg, hsl(220, 18%, 13%) 0%, hsl(220, 15%, 10%) 100%);
|
||||||
|
--sp-dialog-border: 1px solid rgba(255, 255, 255, 0.08);
|
||||||
|
--sp-dialog-shadow: 0 8px 32px rgba(0, 0, 0, 0.55), 0 2px 8px rgba(0, 0, 0, 0.35),
|
||||||
|
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
||||||
|
--sp-dialog-radius: 8px;
|
||||||
|
--sp-dialog-grip-color: rgba(255, 255, 255, 0.07);
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
--sp-btn-font-size: 12px;
|
||||||
|
--sp-btn-font-size-sm: 11px;
|
||||||
|
--sp-btn-font-size-lg: 13px;
|
||||||
|
--sp-btn-padding: 7px 14px;
|
||||||
|
--sp-btn-padding-sm: 4px 10px;
|
||||||
|
--sp-btn-padding-lg: 9px 18px;
|
||||||
|
--sp-btn-radius: 5px;
|
||||||
|
--sp-btn-gap: 6px;
|
||||||
|
|
||||||
|
--sp-btn-primary-bg: var(--sp-accent);
|
||||||
|
--sp-btn-primary-text: #fff;
|
||||||
|
--sp-btn-primary-hover: var(--sp-accent-hover);
|
||||||
|
--sp-btn-primary-active: var(--sp-accent-active);
|
||||||
|
|
||||||
|
--sp-btn-secondary-bg: rgba(255, 255, 255, 0.05);
|
||||||
|
--sp-btn-secondary-text: var(--sp-text-secondary);
|
||||||
|
--sp-btn-secondary-border: rgba(255, 255, 255, 0.12);
|
||||||
|
--sp-btn-secondary-hover-bg: rgba(255, 255, 255, 0.1);
|
||||||
|
--sp-btn-secondary-hover-text: var(--sp-text-primary);
|
||||||
|
|
||||||
|
--sp-btn-danger-bg: var(--sp-color-red);
|
||||||
|
--sp-btn-danger-text: #fff;
|
||||||
|
--sp-btn-danger-hover: var(--sp-color-red-dark);
|
||||||
|
|
||||||
/* Focus ring — module-wide keyboard navigation anchor */
|
/* Focus ring — module-wide keyboard navigation anchor */
|
||||||
--sp-focus: var(--sp-theme-focus, var(--color-focus-outline, #63c287));
|
--sp-focus: var(--sp-theme-focus, var(--color-focus-outline, #63c287));
|
||||||
--sp-focus-ring: 0 0 0 2px var(--sp-focus);
|
--sp-focus-ring: 0 0 0 2px var(--sp-focus);
|
||||||
@@ -86,4 +119,8 @@
|
|||||||
--sp-theme-control: #1a1d20;
|
--sp-theme-control: #1a1d20;
|
||||||
--sp-theme-focus: #63c287;
|
--sp-theme-focus: #63c287;
|
||||||
--sp-theme-urgency: #c8982a;
|
--sp-theme-urgency: #c8982a;
|
||||||
|
--sp-btn-primary-bg: var(--sp-theme-accent, #4a9e6b);
|
||||||
|
--sp-btn-primary-text: #fff;
|
||||||
|
--sp-btn-primary-hover: var(--sp-theme-accent-hover, #3d8f5e);
|
||||||
|
--sp-btn-primary-active: var(--sp-theme-accent-active, #2d7a4f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
{{#unless isEmpty}}
|
{{#unless isEmpty}}
|
||||||
{{#each participants}}
|
{{#each participants}}
|
||||||
{{> "modules/scrying-pool/templates/participant-card.hbs"}}
|
{{> "modules/scrying-pool/templates/participant-card.hbs" shape=../tileShape}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<p class="directors-board__empty" role="listitem">
|
<p class="directors-board__empty" role="listitem">
|
||||||
@@ -78,6 +78,41 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{!-- Tile shape selector --}}
|
||||||
|
<div class="directors-board__tile-shape-bar" role="toolbar" aria-label="Tile shape">
|
||||||
|
<span class="directors-board__tile-shape-label">Shape</span>
|
||||||
|
<div class="directors-board__tile-shape-group">
|
||||||
|
{{#each tileShapes}}
|
||||||
|
<button type="button"
|
||||||
|
class="directors-board__tile-shape-btn{{#if isActive}} is-active{{/if}}"
|
||||||
|
data-action="set-tile-shape"
|
||||||
|
data-shape="{{key}}"
|
||||||
|
data-tooltip="{{label}}">
|
||||||
|
<i class="fas {{icon}}" aria-hidden="true"></i>
|
||||||
|
</button>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{!-- Tile border controls --}}
|
||||||
|
<div class="directors-board__tile-border-bar" role="toolbar" aria-label="Tile border">
|
||||||
|
<span class="directors-board__tile-border-label">Border</span>
|
||||||
|
<div class="directors-board__tile-border-group">
|
||||||
|
{{#each tileBorderWidths}}
|
||||||
|
<button type="button"
|
||||||
|
class="directors-board__tile-border-btn{{#if isActive}} is-active{{/if}}"
|
||||||
|
data-action="set-tile-border-width"
|
||||||
|
data-width="{{value}}"
|
||||||
|
data-tooltip="{{label}}">{{label}}</button>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
<input type="color"
|
||||||
|
class="directors-board__tile-border-color"
|
||||||
|
data-action="set-tile-border-color"
|
||||||
|
value="{{tileBorderColor}}"
|
||||||
|
data-tooltip="Border color" />
|
||||||
|
</div>
|
||||||
|
|
||||||
{{!-- Story 5.2: Video widget width customization --}}
|
{{!-- Story 5.2: Video widget width customization --}}
|
||||||
<div class="directors-board__widget-width-bar" role="toolbar" aria-label="{{localize 'scrying-pool.directorsBoard.widgetWidth.label'}}">
|
<div class="directors-board__widget-width-bar" role="toolbar" aria-label="{{localize 'scrying-pool.directorsBoard.widgetWidth.label'}}">
|
||||||
<span class="directors-board__widget-width-label">{{localize "scrying-pool.directorsBoard.widgetWidth.label"}}</span>
|
<span class="directors-board__widget-width-label">{{localize "scrying-pool.directorsBoard.widgetWidth.label"}}</span>
|
||||||
@@ -85,7 +120,7 @@
|
|||||||
<div class="directors-board__widget-width-row">
|
<div class="directors-board__widget-width-row">
|
||||||
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.small"}}</span>
|
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.small"}}</span>
|
||||||
<select class="directors-board__widget-width-select" data-action="set-widget-width-sm" data-selected="{{widgetWidthSm}}">
|
<select class="directors-board__widget-width-select" data-action="set-widget-width-sm" data-selected="{{widgetWidthSm}}">
|
||||||
{{#each widthOptions}}
|
{{#each smWidthOptions}}
|
||||||
<option value="{{this.value}}">{{this.label}}</option>
|
<option value="{{this.value}}">{{this.label}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</select>
|
</select>
|
||||||
@@ -93,7 +128,7 @@
|
|||||||
<div class="directors-board__widget-width-row">
|
<div class="directors-board__widget-width-row">
|
||||||
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.large"}}</span>
|
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.large"}}</span>
|
||||||
<select class="directors-board__widget-width-select" data-action="set-widget-width-md" data-selected="{{widgetWidthMd}}">
|
<select class="directors-board__widget-width-select" data-action="set-widget-width-md" data-selected="{{widgetWidthMd}}">
|
||||||
{{#each widthOptions}}
|
{{#each mdWidthOptions}}
|
||||||
<option value="{{this.value}}">{{this.label}}</option>
|
<option value="{{this.value}}">{{this.label}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</select>
|
</select>
|
||||||
@@ -102,6 +137,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="directors-board__footer">
|
<footer class="directors-board__footer">
|
||||||
|
<div class="directors-board__footer-group directors-board__footer-group--strip">
|
||||||
|
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--secondary" data-action="reset-strip-position"
|
||||||
|
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.resetStrip"}}">
|
||||||
|
<i class="fas fa-undo-alt" aria-hidden="true"></i>
|
||||||
|
{{localize "scrying-pool.directorsBoard.footer.resetStrip"}}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
<div class="directors-board__footer-group directors-board__footer-group--presets">
|
<div class="directors-board__footer-group directors-board__footer-group--presets">
|
||||||
<button type="button" class="directors-board__footer-btn" data-action="save-preset"
|
<button type="button" class="directors-board__footer-btn" data-action="save-preset"
|
||||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.savePreset"}}">
|
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.savePreset"}}">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{{!-- Participant Card — single participant tile in the Director's Board --}}
|
{{!-- Participant Card — single participant tile in the Director's Board --}}
|
||||||
<div class="scrying-pool participant-card sp-state-{{state}}{{#if hasPendingOp}} sp-state-pending{{/if}}"
|
<div class="scrying-pool participant-card sp-state-{{state}}{{#if hasPendingOp}} sp-state-pending{{/if}} sp-shape-{{shape}}"
|
||||||
role="listitem"
|
role="listitem"
|
||||||
aria-label="{{cardAriaLabel}}"
|
aria-label="{{cardAriaLabel}}"
|
||||||
data-user-id="{{userId}}"
|
data-user-id="{{userId}}"
|
||||||
|
|||||||
@@ -3,16 +3,6 @@
|
|||||||
role="complementary"
|
role="complementary"
|
||||||
aria-label="Scrying Pool">
|
aria-label="Scrying Pool">
|
||||||
|
|
||||||
{{!-- Drag grip (top bar, replaces window header drag affordance) --}}
|
|
||||||
<div class="sp-strip__grip" data-action="drag-grip" aria-hidden="true">
|
|
||||||
<i class="fas fa-grip-lines"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{!-- Lightweight close button (top-right corner, replaces window header) --}}
|
|
||||||
<button class="sp-strip__close-btn" data-action="close-strip"
|
|
||||||
aria-label="Close Scrying Pool"
|
|
||||||
data-tooltip="Close">×</button>
|
|
||||||
|
|
||||||
{{!-- First-open tip (right-click affordance) --}}
|
{{!-- First-open tip (right-click affordance) --}}
|
||||||
{{#if showFirstOpenTip}}
|
{{#if showFirstOpenTip}}
|
||||||
<p class="sp-strip__first-tip">
|
<p class="sp-strip__first-tip">
|
||||||
@@ -21,8 +11,12 @@
|
|||||||
</p>
|
</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{!-- Toolbar row: toggle + Director's Board side by side --}}
|
{{!-- Toolbar: grip + toggle + Director's Board + close on one line --}}
|
||||||
<div class="sp-strip__toolbar">
|
<div class="sp-strip__toolbar">
|
||||||
|
<div class="sp-strip__grip" data-action="drag-grip" aria-hidden="true">
|
||||||
|
<i class="fas fa-grip-lines"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
<button class="sp-strip__toggle" data-action="toggle-expanded"
|
<button class="sp-strip__toggle" data-action="toggle-expanded"
|
||||||
aria-label="{{#if isExpanded}}Collapse Scrying Pool{{else}}Expand Scrying Pool{{/if}}"
|
aria-label="{{#if isExpanded}}Collapse Scrying Pool{{else}}Expand Scrying Pool{{/if}}"
|
||||||
aria-expanded="{{isExpanded}}"
|
aria-expanded="{{isExpanded}}"
|
||||||
@@ -33,15 +27,20 @@
|
|||||||
{{#if isGM}}
|
{{#if isGM}}
|
||||||
<button class="sp-strip__directors-board-cta" data-action="open-directors-board"
|
<button class="sp-strip__directors-board-cta" data-action="open-directors-board"
|
||||||
aria-label="Open Director's Board"
|
aria-label="Open Director's Board"
|
||||||
data-tooltip="Director's Board">
|
data-tooltip="{{localize "scrying-pool.directorsBoard.openButton"}}">
|
||||||
<i class="fas fa-border-all" aria-hidden="true"></i>
|
<i class="fas fa-border-all" aria-hidden="true"></i>
|
||||||
<span>Director's Board</span>
|
|
||||||
</button>
|
</button>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
<span class="sp-strip__toolbar-spacer"></span>
|
||||||
|
|
||||||
|
<button class="sp-strip__close-btn" data-action="close-strip"
|
||||||
|
aria-label="Close Scrying Pool"
|
||||||
|
data-tooltip="Close">×</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{!-- Participant list --}}
|
{{!-- Participant list --}}
|
||||||
<ul class="sp-strip__participants" role="list" style="--sp-widget-width: {{widgetWidth}}px;">
|
<ul class="sp-strip__participants" role="list">
|
||||||
{{#if isEmpty}}
|
{{#if isEmpty}}
|
||||||
{{!-- EmptyStatePanel --}}
|
{{!-- EmptyStatePanel --}}
|
||||||
<li class="sp-strip__empty-state" role="listitem">
|
<li class="sp-strip__empty-state" role="listitem">
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
{{#each participants}}
|
{{#each participants}}
|
||||||
<li class="sp-strip__participant-item" role="listitem">
|
<li class="sp-strip__participant-item" role="listitem">
|
||||||
{{!-- ParticipantAvatar (44×44px container) --}}
|
{{!-- ParticipantAvatar (44×44px container) --}}
|
||||||
<button class="sp-participant-avatar sp-state-{{state}}{{#if hasPendingOp}} sp-state-pending{{/if}}"
|
<button class="sp-participant-avatar sp-state-{{state}}{{#if hasPendingOp}} sp-state-pending{{/if}}{{#if isFocused}} sp-state-focused{{/if}} sp-shape-{{../tileShape}}"
|
||||||
data-user-id="{{userId}}"
|
data-user-id="{{userId}}"
|
||||||
data-action="open-popover"
|
data-action="open-popover"
|
||||||
role="button"
|
role="button"
|
||||||
@@ -60,6 +59,8 @@
|
|||||||
data-tooltip="{{name}} — {{stateLabel}}"
|
data-tooltip="{{name}} — {{stateLabel}}"
|
||||||
aria-pressed="false" style="width: {{../widgetWidth}}px; min-width: {{../widgetWidth}}px;">
|
aria-pressed="false" style="width: {{../widgetWidth}}px; min-width: {{../widgetWidth}}px;">
|
||||||
|
|
||||||
|
<div class="sp-avatar__shell">
|
||||||
|
<div class="sp-avatar__shape">
|
||||||
{{!-- Video container for stream-access mode (full AV replacement) --}}
|
{{!-- Video container for stream-access mode (full AV replacement) --}}
|
||||||
{{#if hasStreamAccess}}
|
{{#if hasStreamAccess}}
|
||||||
<div class="sp-participant-video" aria-hidden="true"></div>
|
<div class="sp-participant-video" aria-hidden="true"></div>
|
||||||
@@ -70,6 +71,8 @@
|
|||||||
|
|
||||||
{{!-- Corner badge (12px bottom-right) --}}
|
{{!-- Corner badge (12px bottom-right) --}}
|
||||||
<span class="sp-avatar__corner-badge" aria-hidden="true"></span>
|
<span class="sp-avatar__corner-badge" aria-hidden="true"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{{!-- Expanded view: name + state rows (vertical-md) --}}
|
{{!-- Expanded view: name + state rows (vertical-md) --}}
|
||||||
{{#if ../isExpanded}}
|
{{#if ../isExpanded}}
|
||||||
|
|||||||
@@ -315,12 +315,12 @@ describe('ScryingPoolStrip', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('_computeStripWidth()', () => {
|
describe('_computeStripWidth()', () => {
|
||||||
it('returns 85 for vertical-sm', () => {
|
it('returns tileWidth + 11 for vertical-sm', () => {
|
||||||
expect(strip._computeStripWidth('vertical-sm', 3)).toBe(85);
|
expect(strip._computeStripWidth('vertical-sm', 3)).toBe(83 + 8 + 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns 242 for vertical-md', () => {
|
it('returns tileWidth + 11 for vertical-md', () => {
|
||||||
expect(strip._computeStripWidth('vertical-md', 3)).toBe(242);
|
expect(strip._computeStripWidth('vertical-md', 3)).toBe(150 + 8 + 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns 85 for unknown layout', () => {
|
it('returns 85 for unknown layout', () => {
|
||||||
@@ -465,24 +465,20 @@ describe('ScryingPoolStrip', () => {
|
|||||||
vi.stubGlobal('document', originalDocument);
|
vi.stubGlobal('document', originalDocument);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('removes video elements and cleans up streams', () => {
|
it('removes video elements without stopping tracks', () => {
|
||||||
const mockStream = new MediaStream();
|
const mockStream = new MediaStream();
|
||||||
const mockTrack = { stop: vi.fn() };
|
|
||||||
const mockVideoElement = {
|
const mockVideoElement = {
|
||||||
srcObject: mockStream,
|
srcObject: mockStream,
|
||||||
remove: vi.fn(),
|
remove: vi.fn(),
|
||||||
};
|
};
|
||||||
// Add getTracks method to the mock stream
|
|
||||||
mockStream.getTracks = vi.fn().mockReturnValue([mockTrack]);
|
|
||||||
|
|
||||||
vi.stubGlobal('document', {
|
strip.element = {
|
||||||
querySelectorAll: vi.fn().mockReturnValue([mockVideoElement]),
|
querySelectorAll: vi.fn().mockReturnValue([mockVideoElement]),
|
||||||
});
|
};
|
||||||
|
|
||||||
strip._cleanupVideoStreams();
|
strip._cleanupVideoStreams();
|
||||||
|
|
||||||
expect(mockStream.getTracks).toHaveBeenCalled();
|
// Tracks are NOT stopped — they belong to FoundryVTT's WebRTC system
|
||||||
expect(mockTrack.stop).toHaveBeenCalled();
|
|
||||||
expect(mockVideoElement.srcObject).toBe(null);
|
expect(mockVideoElement.srcObject).toBe(null);
|
||||||
expect(mockVideoElement.remove).toHaveBeenCalled();
|
expect(mockVideoElement.remove).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
@@ -493,18 +489,18 @@ describe('ScryingPoolStrip', () => {
|
|||||||
remove: vi.fn(),
|
remove: vi.fn(),
|
||||||
};
|
};
|
||||||
|
|
||||||
vi.stubGlobal('document', {
|
strip.element = {
|
||||||
querySelectorAll: vi.fn().mockReturnValue([mockVideoElement]),
|
querySelectorAll: vi.fn().mockReturnValue([mockVideoElement]),
|
||||||
});
|
};
|
||||||
|
|
||||||
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
||||||
expect(mockVideoElement.remove).toHaveBeenCalled();
|
expect(mockVideoElement.remove).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles empty video element list', () => {
|
it('handles empty video element list', () => {
|
||||||
vi.stubGlobal('document', {
|
strip.element = {
|
||||||
querySelectorAll: vi.fn().mockReturnValue([]),
|
querySelectorAll: vi.fn().mockReturnValue([]),
|
||||||
});
|
};
|
||||||
|
|
||||||
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
||||||
});
|
});
|
||||||
|
|||||||