Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 156f786448 | |||
| 9e80c2c028 | |||
| 816b7951fb | |||
| 069107052d |
@@ -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,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'
|
||||
project_name: 'video-view-manager'
|
||||
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)
|
||||
@@ -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` +
|
||||
`scripts/package.mjs` + `src/contracts/` (with validators + frozen fixtures) +
|
||||
`.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.",
|
||||
"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": {
|
||||
"showGMSelfFeed": {
|
||||
"label": "Show GM Self Feed",
|
||||
@@ -73,7 +79,8 @@
|
||||
"avModeEnable": "Enable A/V",
|
||||
"avModeDisable": "Disable A/V",
|
||||
"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": {
|
||||
"showAll": "Show All",
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"scrying-pool": {
|
||||
"badge": {
|
||||
"state": {
|
||||
"hidden": "Masqué de la table",
|
||||
"self-muted": "Caméra en pause",
|
||||
"offline": "Non connecté",
|
||||
"cam-lost": "Caméra indisponible",
|
||||
"reconnecting": "Rejoindre la vue",
|
||||
"never-connected": "Pas encore connecté",
|
||||
"ghost": "Quitte la session"
|
||||
}
|
||||
},
|
||||
"firstEncounterPanel": {
|
||||
"title": "Votre visibilité caméra a changé.",
|
||||
"body": "L'audio continue normalement.",
|
||||
"gotIt": "Compris"
|
||||
},
|
||||
"detailsPanel": {
|
||||
"close": "Fermer",
|
||||
"audienceSuppressed": "Les autres joueurs ne peuvent pas voir votre flux",
|
||||
"staleData": "Les données peuvent être obsolètes",
|
||||
"audioReassurance": "Votre audio est actif pour tous les participants."
|
||||
},
|
||||
"notifications": {
|
||||
"gmHid": "Le MJ a masqué la caméra de {name}",
|
||||
"gmShowed": "Le MJ a affiché la caméra de {name}",
|
||||
"personalHidden": "Le MJ a masqué votre caméra. Votre portrait est affiché aux autres participants.",
|
||||
"personalShowed": "Votre caméra est maintenant visible à la table.",
|
||||
"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."
|
||||
},
|
||||
"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": {
|
||||
"showGMSelfFeed": {
|
||||
"label": "Afficher le flux du MJ",
|
||||
"hint": "Lorsque activé, le propre flux caméra du MJ est affiché dans la barre Scrying Pool."
|
||||
},
|
||||
"notificationVerbosity": {
|
||||
"label": "Verbosité des notifications",
|
||||
"hint": "Contrôle quelles notifications de changement d'état de caméra vous voyez. 'Toutes' affiche chaque changement ; 'MJ uniquement' affiche uniquement les changements pour le MJ et le participant concerné ; 'Silencieux' supprime toutes les notifications sauf vos propres changements de caméra.",
|
||||
"choices": {
|
||||
"all": "Toutes",
|
||||
"gm-only": "MJ uniquement",
|
||||
"silent": "Silencieux"
|
||||
}
|
||||
}
|
||||
},
|
||||
"directorsBoard": {
|
||||
"title": "Tableau du Réalisateur",
|
||||
"close": "Fermer",
|
||||
"empty": "Aucun participant connecté.",
|
||||
"openButton": "Ouvrir le Tableau du Réalisateur",
|
||||
"dockLayout": {
|
||||
"label": "Disposition de la vue",
|
||||
"vertical-sm": "Verticale petite",
|
||||
"vertical-md": "Verticale grande",
|
||||
"horizontal-sm": "Horizontale petite",
|
||||
"horizontal-md": "Horizontale grande",
|
||||
"mosaic-sm": "Mosaïque petite",
|
||||
"mosaic-md": "Mosaïque grande"
|
||||
},
|
||||
"widgetWidth": {
|
||||
"label": "Largeurs des widgets vidéo",
|
||||
"small": "Petite :",
|
||||
"large": "Grande :"
|
||||
},
|
||||
"footer": {
|
||||
"savePreset": "Sauvegarder la disposition",
|
||||
"loadPreset": "Charger la disposition",
|
||||
"exportPresets": "Exporter",
|
||||
"importPresets": "Importer",
|
||||
"autoApplySettings": "Application auto...",
|
||||
"avModeEnable": "Activer A/V",
|
||||
"avModeDisable": "Désactiver A/V",
|
||||
"avConfig": "Paramètres A/V...",
|
||||
"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": {
|
||||
"showAll": "Tout afficher",
|
||||
"hideAll": "Tout masquer",
|
||||
"undo": "Annuler",
|
||||
"restore": "Rétablir",
|
||||
"spotlight": "Mettre en avant"
|
||||
},
|
||||
"shortcuts": {
|
||||
"title": "Raccourcis clavier",
|
||||
"openBoard": "Ouvrir/Fermer le tableau",
|
||||
"showAll": "Afficher tous les participants",
|
||||
"hideAll": "Masquer tous les participants",
|
||||
"spotlight": "Mettre le participant sélectionné en avant",
|
||||
"openPanel": "Ouvrir la référence des raccourcis"
|
||||
}
|
||||
},
|
||||
"keybindings": {
|
||||
"showAll": {
|
||||
"name": "Afficher tous les participants",
|
||||
"hint": "Définir tous les flux des participants non-fantômes sur visible"
|
||||
},
|
||||
"hideAll": {
|
||||
"name": "Masquer tous les participants",
|
||||
"hint": "Définir tous les flux des participants non-fantômes sur masqué"
|
||||
},
|
||||
"spotlightParticipant": {
|
||||
"name": "Mettre le participant en avant",
|
||||
"hint": "Affiche le participant sélectionné et masques tous les autres"
|
||||
}
|
||||
},
|
||||
"presets": {
|
||||
"save": {
|
||||
"saveButton": "Sauvegarder la disposition",
|
||||
"cancelButton": "Annuler",
|
||||
"title": "Sauvegarder la disposition caméra",
|
||||
"nameLabel": "Nom de la disposition",
|
||||
"namePlaceholder": "ex. Combat, Jeu de rôle, Introduction...",
|
||||
"descriptionHint": "Sauvegarde la disposition actuelle de visibilité des caméras pour tous les participants."
|
||||
},
|
||||
"load": {
|
||||
"loadButton": "Charger",
|
||||
"cancelButton": "Annuler",
|
||||
"title": "Charger la disposition caméra",
|
||||
"emptyMessage": "Aucune disposition sauvegardée pour l'instant. Utilisez 'Sauvegarder la disposition' pour en créer une."
|
||||
},
|
||||
"notifications": {
|
||||
"saved": "Disposition '{name}' sauvegardée.",
|
||||
"applied": "Disposition '{name}' appliquée.",
|
||||
"scene-applied": "Scène changée : disposition caméra mise à jour"
|
||||
}
|
||||
},
|
||||
"scenePresetPanel": {
|
||||
"title": "Paramètres d'application automatique",
|
||||
"enableAutoApply": "Activer l'application automatique",
|
||||
"preset": "Disposition",
|
||||
"selectPreset": "Sélectionner une disposition...",
|
||||
"preDelay": "Pré-délai",
|
||||
"globalSettingsHint": "L'application automatique peut aussi être activée/désactivée globalement dans les paramètres du module.",
|
||||
"noScene": "Aucune scène n'est actuellement active.",
|
||||
"notifications": {
|
||||
"enabled": "Application automatique activée pour cette scène.",
|
||||
"disabled": "Application automatique désactivée pour cette scène.",
|
||||
"presetSelected": "Disposition d'application automatique définie sur : {name}"
|
||||
}
|
||||
},
|
||||
"presetExport": {
|
||||
"title": "Exporter les dispositions caméra",
|
||||
"description": "Téléchargez toutes les dispositions caméra sous forme de fichier JSON pouvant être importé dans un autre monde.",
|
||||
"scene": "Scène",
|
||||
"presetCount": "Dispositions",
|
||||
"filename": "Nom du fichier",
|
||||
"export": "Exporter",
|
||||
"cancel": "Annuler",
|
||||
"exporting": "Exportation en cours...",
|
||||
"exportSuccess": "Dispositions caméra exportées avec succès.",
|
||||
"exportFailed": "Échec de l'export des dispositions"
|
||||
},
|
||||
"presetImport": {
|
||||
"title": "Importer les dispositions caméra",
|
||||
"description": "Chargez un fichier JSON contenant des dispositions caméra à ajouter à cette scène.",
|
||||
"selectFile": "Sélectionner un fichier",
|
||||
"chooseFile": "Choisir un fichier JSON...",
|
||||
"importMode": "Mode d'import",
|
||||
"importModeMerge": "Fusionner",
|
||||
"importModeReplace": "Remplacer",
|
||||
"importModeMergeHint": "Ajoute de nouvelles dispositions, ignore les doublons",
|
||||
"importModeReplaceHint": "Supprime toutes les dispositions existantes et importe les nouvelles",
|
||||
"previewTitle": "Aperçu",
|
||||
"previewWillImport": "Va importer",
|
||||
"previewWillSkip": "Va ignorer (déjà existe)",
|
||||
"import": "Importer",
|
||||
"confirmReplace": "Remplacer tout",
|
||||
"cancel": "Annuler",
|
||||
"importing": "Importation en cours...",
|
||||
"importFailed": "Échec de l'import des dispositions",
|
||||
"selectFileFirst": "Veuillez sélectionner un fichier d'abord",
|
||||
"existingPresetsWarning": "Cette scène a {existingPresetCount} disposition(s) existante(s).",
|
||||
"replaceConfirmation": "Cela va supprimer toutes les {existingPresetCount} disposition(s) existante(s) et les remplacer par les nouvelles. Cette action ne peut pas être annulée."
|
||||
}
|
||||
},
|
||||
"SCRYING_POOL": {
|
||||
"UnknownScene": "Scène inconnue",
|
||||
"firstBadgeEncounter": "Première rencontre avec le badge",
|
||||
"PrivacyPanel": {
|
||||
"title": "Panneau de confidentialité du joueur",
|
||||
"sectionHeader": "Consentements d'automatisation",
|
||||
"sectionDescription": "Contrôlez quelles fonctionnalités d'automatisation peuvent affecter votre caméra et votre présence à l'écran.",
|
||||
"reactionCamLabel": "Caméra de réaction",
|
||||
"reactionCamDescription": "Affiche automatiquement votre caméra pendant les moments clés (combats, jets de dés, etc.)",
|
||||
"toggleOn": "Activé",
|
||||
"toggleOff": "Désactivé",
|
||||
"readOnlyNotice": "Les paramètres de confidentialité de ce joueur sont en lecture seule. Vous ne pouvez pas modifier les préférences de consentement d'un autre joueur.",
|
||||
"savedNotification": "Paramètres de confidentialité sauvegardés",
|
||||
"saveError": "Échec de la sauvegarde des paramètres de confidentialité",
|
||||
"portraitFallbackLabel": "Portrait de secours",
|
||||
"portraitFallbackDescription": "Image à afficher lorsque votre caméra n'est pas disponible ou ne fonctionne pas.",
|
||||
"chooseImageLabel": "Choisir une image",
|
||||
"removeImageLabel": "Supprimer l'image personnalisée",
|
||||
"removeImageConfirm": "Êtes-vous sûr de vouloir supprimer votre portrait personnalisé ? Votre avatar FoundryVTT sera utilisé à la place.",
|
||||
"portraitSaved": "Portrait mis à jour avec succès",
|
||||
"portraitRemoved": "Portrait personnalisé supprimé",
|
||||
"portraitErrorUnsupported": "Format non pris en charge. Veuillez utiliser PNG, JPG, WEBP ou GIF statique.",
|
||||
"portraitErrorTooLarge": "L'image est trop volumineuse. Veuillez utiliser une image de moins de 5 Mo.",
|
||||
"portraitErrorInvalid": "Fichier image invalide. Veuillez en essayer un autre."
|
||||
},
|
||||
"Settings": {
|
||||
"PlayerPrivacyPanel": "Panneau de confidentialité du joueur",
|
||||
"PlayerPrivacyPanelLabel": "Contrôlez les effets d'automatisation sur votre caméra",
|
||||
"PlayerPrivacyPanelHint": "Acceptez ou refusez les fonctionnalités Caméra de réaction et autres automatisations",
|
||||
"GMPlayerPrivacySelector": "Voir les paramètres de confidentialité du joueur",
|
||||
"GMPlayerPrivacySelectorLabel": "Voir et gérer les paramètres de consentement de confidentialité des joueurs",
|
||||
"GMPlayerPrivacySelectorHint": "Sélectionnez un joueur pour voir ses préférences de consentement d'automatisation (lecture seule)",
|
||||
"Title": "Paramètres Scrying Pool",
|
||||
"Hint": "Configurer le comportement du module Scrying Pool",
|
||||
"StripStatus": "État de la barre",
|
||||
"ReopenStrip": "Ouvrir la barre",
|
||||
"CloseStrip": "Fermer la barre"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,6 +163,33 @@ Hooks.once("init", () => {
|
||||
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
|
||||
adapter.settings.register("widgetWidthSm", {
|
||||
scope: "world",
|
||||
|
||||
@@ -23,10 +23,13 @@
|
||||
"lang": "en",
|
||||
"name": "English",
|
||||
"path": "lang/en.json"
|
||||
},
|
||||
{
|
||||
"lang": "fr",
|
||||
"name": "French",
|
||||
"path": "lang/fr.json"
|
||||
}
|
||||
],
|
||||
"packs": [
|
||||
],
|
||||
"url": "${url}",
|
||||
"manifest": "${manifest}",
|
||||
"download": "${download}",
|
||||
|
||||
|
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
|
||||
const widgetWidthSm = this._adapter.settings?.get?.('widgetWidthSm') ?? '83';
|
||||
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: '80', label: '80px' },
|
||||
{ value: '100', label: '100px' },
|
||||
{ value: '120', label: '120px' },
|
||||
{ value: '150', label: '150px' },
|
||||
{ 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 {
|
||||
@@ -397,7 +432,6 @@ export class DirectorsBoard extends _AppBase {
|
||||
hasRestore: this._spotlightSnapshot !== null,
|
||||
presetCount,
|
||||
hasPresets: presetCount > 0,
|
||||
// Story 3.2: Auto-apply configuration
|
||||
hasScene: !!this._adapter.scenes?.current?.(),
|
||||
autoApplyEnabled: autoApplyConfig.enabled,
|
||||
autoApplyPresetName: autoApplyConfig.presetName,
|
||||
@@ -407,8 +441,16 @@ export class DirectorsBoard extends _AppBase {
|
||||
avModeEnabled: (game.webrtc?.settings?.world?.mode ?? 0) !== 0,
|
||||
// Dock layout selector
|
||||
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
|
||||
widthOptions: WIDTH_OPTIONS,
|
||||
smWidthOptions: SM_WIDTH_OPTIONS,
|
||||
mdWidthOptions: MD_WIDTH_OPTIONS,
|
||||
widgetWidthSm,
|
||||
widgetWidthMd,
|
||||
};
|
||||
@@ -469,6 +511,9 @@ export class DirectorsBoard extends _AppBase {
|
||||
case 'toggle-av-mode': this._onToggleAVMode(); break;
|
||||
case 'open-av-config': this._onOpenAVConfig(); 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;
|
||||
}
|
||||
};
|
||||
@@ -501,6 +546,15 @@ export class DirectorsBoard extends _AppBase {
|
||||
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)
|
||||
const grip = root.querySelector('[data-action="drag-grip"]');
|
||||
if (grip) {
|
||||
@@ -737,6 +791,8 @@ export class DirectorsBoard extends _AppBase {
|
||||
if (!layoutKey) return;
|
||||
try {
|
||||
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) {
|
||||
console.error('[ScryingPool] Failed to set dockLayout:', err);
|
||||
}
|
||||
@@ -760,6 +816,59 @@ export class DirectorsBoard extends _AppBase {
|
||||
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.
|
||||
*/
|
||||
|
||||
@@ -143,8 +143,32 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
/** @type {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
|
||||
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. */
|
||||
@@ -152,8 +176,13 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
try {
|
||||
const saved = game.user?.getFlag?.('scrying-pool', 'stripState');
|
||||
if (saved?.left != null && saved?.top != null) {
|
||||
if (this.options?.position) {
|
||||
Object.assign(this.options.position, { left: saved.left, top: saved.top });
|
||||
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) {
|
||||
Object.assign(this.options.position, { left: saved.left, top: saved.top });
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (_e) { /* no-op in test environment */ }
|
||||
@@ -188,6 +217,22 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
? userIds
|
||||
: 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)
|
||||
const hasStreamAccess = this._adapter.webrtc?.getMediaStreamForUser !== undefined;
|
||||
|
||||
@@ -200,8 +245,16 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
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.
|
||||
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
|
||||
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 isLarge = effectiveSize === 'md';
|
||||
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;
|
||||
|
||||
// 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 {
|
||||
participants: visibleParticipants,
|
||||
isExpanded,
|
||||
@@ -234,7 +296,13 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
hasStreamAccess,
|
||||
isGM,
|
||||
// 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 => {
|
||||
const userId = btn.dataset.userId;
|
||||
btn.addEventListener('click', e => {
|
||||
if (e.shiftKey) {
|
||||
e.stopPropagation();
|
||||
this._toggleFocus(userId);
|
||||
return;
|
||||
}
|
||||
e.stopPropagation();
|
||||
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"]');
|
||||
if (toggle) {
|
||||
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)
|
||||
// Double-click grip resets participant order to connection order
|
||||
const grip = el.querySelector('[data-action="drag-grip"]');
|
||||
if (grip) {
|
||||
grip.addEventListener('dblclick', e => {
|
||||
e.preventDefault();
|
||||
this._resetParticipantOrder();
|
||||
});
|
||||
grip.addEventListener('mousedown', e => {
|
||||
if (e.button !== 0) return;
|
||||
e.preventDefault();
|
||||
@@ -297,6 +402,7 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
const onUp = () => {
|
||||
document.removeEventListener('mousemove', onMove);
|
||||
document.removeEventListener('mouseup', onUp);
|
||||
this._savePosition();
|
||||
};
|
||||
document.addEventListener('mousemove', onMove);
|
||||
document.addEventListener('mouseup', onUp);
|
||||
@@ -316,13 +422,32 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
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.
|
||||
// Spotlight mode doubles the strip window to fit the enlarged tile.
|
||||
if (typeof this.setPosition === 'function') {
|
||||
const layout = context?.dockLayout ?? 'vertical-sm';
|
||||
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);
|
||||
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');
|
||||
|
||||
switch (layout) {
|
||||
case 'vertical-sm': return smWidth + 2; // widget + 2px border
|
||||
case 'vertical-md': return 242; // 240px strip + 2px border (expanded view has fixed width)
|
||||
case 'vertical-sm': return rowWidth(smWidth, 1);
|
||||
case 'vertical-md': return rowWidth(mdWidth, 1);
|
||||
case 'horizontal-sm': return rowWidth(smWidth, 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))));
|
||||
@@ -410,6 +535,14 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
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
|
||||
this._cleanupVideoStreams();
|
||||
|
||||
@@ -424,18 +557,24 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleans up all video elements and their associated streams.
|
||||
* Called when the strip is closed to prevent memory leaks.
|
||||
* Removes video elements from the DOM when the strip closes.
|
||||
* 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() {
|
||||
if (typeof document === 'undefined') return;
|
||||
|
||||
const videoElements = document.querySelectorAll?.('.sp-participant-video__element') ?? [];
|
||||
videoElements.forEach(videoEl => {
|
||||
// Stop all tracks in the stream
|
||||
if (videoEl.srcObject instanceof MediaStream) {
|
||||
videoEl.srcObject.getTracks().forEach(track => track.stop());
|
||||
// Clear all retry timers
|
||||
for (const [, retryInfo] of this._videoStreamRetries) {
|
||||
if (retryInfo.retryTimer !== null) {
|
||||
clearTimeout(retryInfo.retryTimer);
|
||||
}
|
||||
}
|
||||
this._videoStreamRetries.clear();
|
||||
|
||||
const videoElements = this.element?.querySelectorAll?.('.sp-participant-video__element') ?? [];
|
||||
videoElements.forEach(videoEl => {
|
||||
videoEl.srcObject = null;
|
||||
videoEl.remove();
|
||||
});
|
||||
@@ -626,9 +765,13 @@ export class ScryingPoolStrip extends _AppBase {
|
||||
// Set up error handling
|
||||
videoElement.addEventListener('error', () => {
|
||||
console.warn('[ScryingPool] Video element error for user:', userId);
|
||||
this._onStreamError(userId);
|
||||
});
|
||||
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
||||
// ── 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 {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
color: var(--sp-accent-emphasis, var(--sp-accent));
|
||||
background-color: rgba(255, 255, 255, 0.06);
|
||||
color: var(--sp-accent-hover);
|
||||
}
|
||||
|
||||
// Active state
|
||||
&:active {
|
||||
background-color: rgba(0, 0, 0, 0.2);
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
// Focus state
|
||||
|
||||
@@ -10,14 +10,13 @@
|
||||
// via DEFAULT_OPTIONS.classes. The content section and footer live inside PARTS.
|
||||
|
||||
.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);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-top: 2px solid hsl(200, 55%, 40%);
|
||||
border-radius: 8px;
|
||||
box-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);
|
||||
|
||||
border: var(--sp-dialog-border);
|
||||
border-top: 2px solid var(--sp-accent);
|
||||
border-radius: var(--sp-dialog-radius);
|
||||
box-shadow: var(--sp-dialog-shadow);
|
||||
|
||||
/* Ensure Director's Board appears above the video strip */
|
||||
z-index: 100;
|
||||
|
||||
@@ -40,13 +39,13 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: grab;
|
||||
color: var(--sp-text-muted, hsl(0, 0%, 70%));
|
||||
color: var(--sp-text-muted);
|
||||
opacity: 0.35;
|
||||
font-size: 10px;
|
||||
flex-shrink: 0;
|
||||
transition: opacity 0.15s, background 0.15s;
|
||||
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); }
|
||||
&:active { cursor: grabbing; opacity: 1; }
|
||||
@@ -67,7 +66,7 @@
|
||||
background: transparent;
|
||||
color: var(--sp-text-muted);
|
||||
border: none;
|
||||
border-radius: var(--sp-radius-sm, 3px);
|
||||
border-radius: var(--sp-radius-sm);
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
transition: opacity 0.15s, background 0.15s, color 0.15s;
|
||||
@@ -107,7 +106,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
padding: 4px 8px;
|
||||
padding: 5px 8px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
flex-shrink: 0;
|
||||
flex-wrap: wrap;
|
||||
@@ -117,31 +116,43 @@
|
||||
.directors-board__bulk-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
font-size: 11px;
|
||||
background: rgba(74, 111, 156, 0.7);
|
||||
color: #e8edf2;
|
||||
border: 1px solid rgba(74, 111, 156, 0.4);
|
||||
border-radius: 3px;
|
||||
padding: 3px 8px;
|
||||
gap: var(--sp-btn-gap, 6px);
|
||||
padding: var(--sp-btn-padding-sm, 4px 10px);
|
||||
font-size: var(--sp-btn-font-size-sm, 11px);
|
||||
font-weight: 600;
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
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; }
|
||||
|
||||
// Undo — neutral
|
||||
&--undo {
|
||||
background: transparent;
|
||||
color: var(--sp-text-muted);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
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 { 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 {
|
||||
background: rgba(123, 79, 166, 0.7);
|
||||
background: rgba(123, 79, 166, 0.75);
|
||||
border-color: rgba(123, 79, 166, 0.4);
|
||||
&:hover { background: rgba(123, 79, 166, 0.95); }
|
||||
}
|
||||
@@ -150,8 +161,8 @@
|
||||
// ── Help / shortcut-panel button ───────────────────────────────────────────
|
||||
.directors-board__help-btn {
|
||||
margin-left: auto;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid rgba(255, 255, 255, 0.15);
|
||||
background: transparent;
|
||||
@@ -164,31 +175,36 @@
|
||||
display: flex;
|
||||
align-items: 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) ────────────────────────────────────────────────
|
||||
.directors-board__footer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 3px;
|
||||
padding: 5px 8px 6px;
|
||||
gap: 4px;
|
||||
padding: 6px 8px 8px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
flex-shrink: 0;
|
||||
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 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 3px;
|
||||
gap: 4px;
|
||||
|
||||
&--presets { flex-wrap: wrap; }
|
||||
|
||||
&--controls {
|
||||
padding-top: 3px;
|
||||
padding-top: 4px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
}
|
||||
@@ -206,21 +222,26 @@
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 4px;
|
||||
font-size: 10px;
|
||||
background: rgba(74, 111, 156, 0.65);
|
||||
color: #d8e4f0;
|
||||
border: 1px solid rgba(74, 111, 156, 0.35);
|
||||
border-radius: 3px;
|
||||
padding: 4px 6px;
|
||||
gap: var(--sp-btn-gap, 6px);
|
||||
padding: var(--sp-btn-padding-sm, 4px 10px);
|
||||
font-size: var(--sp-btn-font-size-sm, 11px);
|
||||
font-weight: 600;
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
cursor: pointer;
|
||||
transition: background 0.15s, opacity 0.15s;
|
||||
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||
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); }
|
||||
&:active { opacity: 0.75; }
|
||||
// Default — green primary
|
||||
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] {
|
||||
cursor: not-allowed;
|
||||
@@ -230,39 +251,57 @@
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
|
||||
// Secondary — neutral
|
||||
&--secondary {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
color: var(--sp-text-secondary, #9aa4b0);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
&:hover { background: rgba(255, 255, 255, 0.1); color: #dde2e8; }
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
// Auto-apply toggle — neutral (same as secondary)
|
||||
&--auto-apply {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
color: var(--sp-text-secondary, #9aa4b0);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
&:hover { background: rgba(255, 255, 255, 0.1); color: #dde2e8; }
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
// AV mode — neutral-muted
|
||||
&--av {
|
||||
background: rgba(30, 35, 45, 0.8);
|
||||
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); }
|
||||
}
|
||||
|
||||
// AV mode active — red tone
|
||||
&--av-active {
|
||||
background: rgba(90, 42, 42, 0.85);
|
||||
border-color: rgba(160, 64, 64, 0.6);
|
||||
color: #f0a0a0;
|
||||
font-weight: 500;
|
||||
&:hover { background: rgba(110, 50, 50, 0.95); }
|
||||
}
|
||||
|
||||
// AV config — icon-only
|
||||
&--av-config {
|
||||
background: rgba(30, 35, 45, 0.8);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
color: var(--sp-text-muted, #aaa);
|
||||
color: var(--sp-text-muted);
|
||||
flex: 0 0 auto;
|
||||
font-weight: 500;
|
||||
&:hover { background: rgba(50, 55, 70, 0.9); }
|
||||
}
|
||||
}
|
||||
@@ -280,7 +319,7 @@
|
||||
|
||||
.directors-board__dock-layout-label {
|
||||
font-size: 10px;
|
||||
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
||||
color: var(--sp-text-muted);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
flex-shrink: 0;
|
||||
@@ -312,9 +351,9 @@
|
||||
gap: 1px;
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: 3px;
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
cursor: pointer;
|
||||
color: var(--sp-text-muted, hsl(0, 0%, 65%));
|
||||
color: var(--sp-text-muted);
|
||||
padding: 0;
|
||||
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||
|
||||
@@ -322,14 +361,14 @@
|
||||
|
||||
&:hover {
|
||||
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);
|
||||
}
|
||||
|
||||
&.is-active {
|
||||
background: hsl(200, 50%, 25%);
|
||||
border-color: hsl(200, 55%, 45%);
|
||||
color: hsl(200, 80%, 75%);
|
||||
background: rgba(74, 158, 107, 0.2);
|
||||
border-color: var(--sp-accent);
|
||||
color: var(--sp-accent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,4 +379,131 @@
|
||||
letter-spacing: 0.02em;
|
||||
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 ────────────────────────────────────────────────────────
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.scrying-pool .participant-card {
|
||||
|
||||
@@ -11,9 +11,13 @@
|
||||
.scrying-pool {
|
||||
// Dialog root element
|
||||
&.player-privacy-panel {
|
||||
background: var(--sp-surface);
|
||||
background: var(--sp-dialog-bg);
|
||||
color: var(--sp-text-primary);
|
||||
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
|
||||
@@ -43,9 +47,9 @@
|
||||
}
|
||||
|
||||
.player-privacy-panel__notice--readonly {
|
||||
background: hsla(48, 88%, 55%, 0.10);
|
||||
color: hsl(48, 88%, 60%);
|
||||
border: 1px solid hsla(48, 88%, 55%, 0.25);
|
||||
background: var(--sp-color-yellow-subtle);
|
||||
color: var(--sp-color-yellow);
|
||||
border: 1px solid var(--sp-color-yellow-subtle);
|
||||
}
|
||||
|
||||
// Section
|
||||
@@ -82,13 +86,13 @@
|
||||
// Individual effect card
|
||||
.player-privacy-panel__effect {
|
||||
padding: 8px 10px;
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: 5px;
|
||||
background: linear-gradient(135deg, hsl(215,25%,11%) 0%, hsl(215,22%,9%) 100%);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
transition: border-color 120ms ease;
|
||||
|
||||
&: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; }
|
||||
|
||||
// Enabled state
|
||||
// Enabled state — using accent green from SP tokens
|
||||
.player-privacy-panel__toggle-input:checked + & {
|
||||
background: rgba(46, 160, 67, 0.18);
|
||||
color: hsl(134, 61%, 60%);
|
||||
border-color: rgba(46, 160, 67, 0.4);
|
||||
background: var(--sp-color-green-subtle);
|
||||
color: var(--sp-color-green);
|
||||
border-color: color-mix(in srgb, var(--sp-accent) 40%, transparent);
|
||||
|
||||
i { opacity: 1; }
|
||||
}
|
||||
@@ -188,7 +192,7 @@
|
||||
}
|
||||
.player-privacy-panel__toggle-input:checked + &:hover,
|
||||
.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;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border: 2px solid var(--sp-border);
|
||||
border: 2px solid rgba(255, 255, 255, 0.12);
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
background: hsl(215,25%,11%);
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -227,19 +231,45 @@
|
||||
|
||||
.player-privacy-panel__portrait-choose,
|
||||
.player-privacy-panel__portrait-remove {
|
||||
font-size: 12px;
|
||||
padding: 5px 10px;
|
||||
font-size: var(--sp-btn-font-size, 12px);
|
||||
padding: var(--sp-btn-padding-sm, 5px 10px);
|
||||
display: inline-flex;
|
||||
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 {
|
||||
background: var(--sp-surface);
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: 6px;
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
|
||||
background: var(--sp-dialog-bg);
|
||||
border: var(--sp-dialog-border);
|
||||
border-top: 2px solid var(--sp-accent);
|
||||
border-radius: var(--sp-dialog-radius);
|
||||
box-shadow: var(--sp-dialog-shadow);
|
||||
min-width: 320px;
|
||||
max-width: 480px;
|
||||
overflow: hidden;
|
||||
@@ -248,7 +278,6 @@
|
||||
.sp-gm-privacy-selector {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--sp-surface);
|
||||
}
|
||||
|
||||
.sp-dialog-header {
|
||||
@@ -256,8 +285,8 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 10px 14px;
|
||||
border-bottom: 1px solid var(--sp-border);
|
||||
background: var(--sp-surface-raised);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
@@ -292,8 +321,7 @@
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
color: var(--sp-text-secondary);
|
||||
background: var(--sp-surface);
|
||||
border-bottom: 1px solid var(--sp-border);
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
.sp-user-list {
|
||||
@@ -301,7 +329,6 @@
|
||||
flex-direction: column;
|
||||
padding: 8px;
|
||||
gap: 4px;
|
||||
background: var(--sp-surface);
|
||||
}
|
||||
|
||||
.sp-user-item {
|
||||
@@ -309,14 +336,14 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 7px 12px;
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: 4px;
|
||||
background: linear-gradient(135deg, hsl(215,25%,11%) 0%, hsl(215,22%,9%) 100%);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
cursor: pointer;
|
||||
transition: background 120ms ease, border-color 120ms ease;
|
||||
|
||||
&:hover {
|
||||
background: hsl(215,25%,14%);
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
border-color: var(--sp-accent);
|
||||
}
|
||||
}
|
||||
@@ -332,9 +359,9 @@
|
||||
font-size: 11px;
|
||||
color: var(--sp-text-secondary);
|
||||
padding: 2px 6px;
|
||||
border: 1px solid var(--sp-border);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
border-radius: 3px;
|
||||
background: rgba(255,255,255,0.04);
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
}
|
||||
|
||||
@@ -16,8 +16,12 @@
|
||||
|
||||
.scrying-pool.dialog.preset-export,
|
||||
.scrying-pool.dialog.preset-import {
|
||||
background: var(--sp-surface);
|
||||
background: var(--sp-dialog-bg);
|
||||
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 {
|
||||
padding: var(--sp-space-m);
|
||||
@@ -29,8 +33,9 @@
|
||||
justify-content: flex-end;
|
||||
gap: var(--sp-space-xs);
|
||||
padding: var(--sp-space-m);
|
||||
border-top: 1px solid var(--sp-border);
|
||||
background: var(--sp-surface);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||
}
|
||||
|
||||
// Description text
|
||||
@@ -89,61 +94,66 @@
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Buttons
|
||||
// Buttons — using shared SP button tokens
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
.sp-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: var(--sp-space-xs);
|
||||
padding: var(--sp-space-xs) var(--sp-space-m);
|
||||
border: none;
|
||||
border-radius: var(--sp-radius-sm);
|
||||
font-size: var(--sp-font-size-sm);
|
||||
font-weight: 500;
|
||||
gap: var(--sp-btn-gap, 6px);
|
||||
padding: var(--sp-btn-padding, 7px 14px);
|
||||
border: 1px solid transparent;
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
font-size: var(--sp-btn-font-size, 12px);
|
||||
font-weight: 600;
|
||||
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 {
|
||||
opacity: 0.5;
|
||||
opacity: 0.45;
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 0.9em;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sp-btn-primary {
|
||||
background: var(--sp-accent);
|
||||
color: var(--sp-accent-text);
|
||||
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||
color: var(--sp-btn-primary-text, #fff);
|
||||
|
||||
&:hover:not(:disabled) {
|
||||
background: var(--sp-accent-hover);
|
||||
background: var(--sp-btn-primary-hover, var(--sp-accent-hover));
|
||||
}
|
||||
|
||||
&:active:not(:disabled) {
|
||||
background: var(--sp-accent-active);
|
||||
background: var(--sp-btn-primary-active, var(--sp-accent-active));
|
||||
}
|
||||
}
|
||||
|
||||
.sp-btn-secondary {
|
||||
background: var(--sp-surface-subtle);
|
||||
color: var(--sp-text-primary);
|
||||
border: 1px solid var(--sp-border);
|
||||
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-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 {
|
||||
background: var(--sp-color-red);
|
||||
color: white;
|
||||
background: var(--sp-btn-danger-bg, var(--sp-color-red));
|
||||
color: var(--sp-btn-danger-text, #fff);
|
||||
|
||||
&: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;
|
||||
gap: var(--sp-space-xs);
|
||||
padding: var(--sp-space-sm) var(--sp-space-m);
|
||||
background: var(--sp-surface-subtle);
|
||||
border: 1px dashed var(--sp-border);
|
||||
border-radius: var(--sp-radius-sm);
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px dashed rgba(255, 255, 255, 0.2);
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
cursor: pointer;
|
||||
color: var(--sp-text-secondary);
|
||||
transition: all 0.15s ease;
|
||||
transition: background 0.15s, border-color 0.15s, color 0.15s;
|
||||
|
||||
&:hover {
|
||||
border-color: var(--sp-accent);
|
||||
color: var(--sp-accent);
|
||||
background: var(--sp-surface);
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
i {
|
||||
@@ -222,12 +232,12 @@
|
||||
align-items: flex-start;
|
||||
gap: 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;
|
||||
transition: background 0.15s ease;
|
||||
|
||||
&:hover {
|
||||
background: var(--sp-surface-subtle);
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
}
|
||||
|
||||
input[type="radio"] {
|
||||
@@ -273,9 +283,9 @@
|
||||
padding: 0;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: var(--sp-radius-sm);
|
||||
background: var(--sp-surface);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: var(--sp-btn-radius, 5px);
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.sp-preview-item {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
.scrying-pool.preset-load-dialog {
|
||||
background: var(--sp-surface);
|
||||
background: var(--sp-dialog-bg);
|
||||
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 ────────────────────────────────────────────────────
|
||||
.preset-load-dialog__content {
|
||||
@@ -47,24 +51,26 @@
|
||||
text-align: left;
|
||||
font-size: 13px;
|
||||
padding: 8px 12px;
|
||||
border-radius: 4px;
|
||||
border-radius: var(--sp-btn-radius);
|
||||
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;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
line-height: 1.2;
|
||||
|
||||
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 {
|
||||
background: var(--sp-surface-elevated, rgba(255,255,255,0.06));
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
color: var(--sp-text-primary);
|
||||
border: 1px solid var(--sp-border);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
font-weight: 500;
|
||||
|
||||
&:hover {
|
||||
background: var(--sp-accent, #4a6f9c);
|
||||
border-color: var(--sp-accent, #4a6f9c);
|
||||
background: rgba(74, 158, 107, 0.85);
|
||||
border-color: var(--sp-accent);
|
||||
color: #fff;
|
||||
i { opacity: 1; }
|
||||
}
|
||||
@@ -75,8 +81,9 @@
|
||||
&--cancel {
|
||||
background: transparent;
|
||||
color: var(--sp-text-muted);
|
||||
border: 1px solid var(--sp-border);
|
||||
&:hover { color: var(--sp-text, inherit); border-color: currentColor; }
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
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;
|
||||
gap: 8px;
|
||||
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;
|
||||
border-radius: 0 0 var(--sp-dialog-radius) var(--sp-dialog-radius);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,12 @@
|
||||
@import "../tokens/_base.less";
|
||||
|
||||
.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);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border: var(--sp-dialog-border);
|
||||
border-top: 2px solid var(--sp-accent);
|
||||
border-radius: 8px;
|
||||
box-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);
|
||||
border-radius: var(--sp-dialog-radius);
|
||||
box-shadow: var(--sp-dialog-shadow);
|
||||
|
||||
// ── Form wrapper ──────────────────────────────────────────────────────────
|
||||
.preset-save-dialog__form {
|
||||
@@ -77,7 +76,7 @@
|
||||
font-size: 14px;
|
||||
padding: 9px 12px;
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: 5px;
|
||||
border-radius: var(--sp-btn-radius);
|
||||
background: var(--sp-control-bg, #1a1d20);
|
||||
color: var(--sp-text-primary);
|
||||
outline: none;
|
||||
@@ -103,47 +102,49 @@
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
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);
|
||||
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 {
|
||||
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;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
transition: background 0.15s, border-color 0.15s, opacity 0.15s;
|
||||
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;
|
||||
|
||||
i { font-size: 10px; opacity: 0.85; }
|
||||
i { font-size: 10px; pointer-events: none; }
|
||||
|
||||
&--save {
|
||||
background: var(--sp-accent);
|
||||
color: var(--sp-accent-text, #fff);
|
||||
border: 1px solid transparent;
|
||||
background: var(--sp-btn-primary-bg, var(--sp-accent));
|
||||
color: var(--sp-btn-primary-text, #fff);
|
||||
letter-spacing: 0.02em;
|
||||
|
||||
&:hover { background: var(--sp-accent-hover); }
|
||||
&:active { background: var(--sp-accent-active); }
|
||||
&:hover { background: var(--sp-btn-primary-hover, var(--sp-accent-hover)); }
|
||||
&:active { background: var(--sp-btn-primary-active, var(--sp-accent-active)); }
|
||||
|
||||
i { opacity: 1; }
|
||||
}
|
||||
|
||||
&--cancel {
|
||||
background: transparent;
|
||||
color: var(--sp-text-secondary);
|
||||
border: 1px solid var(--sp-border);
|
||||
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 {
|
||||
color: var(--sp-text-primary);
|
||||
border-color: rgba(255, 255, 255, 0.2);
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
background: var(--sp-btn-secondary-hover-bg, rgba(255,255,255,0.1));
|
||||
color: var(--sp-btn-secondary-hover-text, var(--sp-text-primary));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,17 @@
|
||||
// WARNING: do NOT add max-width or overflow here; the outer window also carries this class
|
||||
// and would clip the expanded inner content.
|
||||
.scrying-pool-strip {
|
||||
background: var(--sp-bg, hsl(220, 15%, 12%));
|
||||
background: rgba(0, 0, 0, 0.01);
|
||||
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) */
|
||||
z-index: 50;
|
||||
|
||||
@@ -46,14 +54,10 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
max-width: 83px;
|
||||
max-width: calc(var(--sp-widget-width, 83px) + 11px);
|
||||
overflow: hidden;
|
||||
transition: max-width 200ms ease-in-out;
|
||||
|
||||
&.is-expanded {
|
||||
max-width: 240px;
|
||||
}
|
||||
|
||||
// Horizontal and mosaic layouts: width is controlled by JS setPosition
|
||||
&.sp-layout-horizontal-sm,
|
||||
&.sp-layout-horizontal-md,
|
||||
@@ -100,18 +104,16 @@
|
||||
.scrying-pool.scrying-pool-strip.sp-layout-horizontal-md,
|
||||
.scrying-pool.scrying-pool-strip.sp-layout-mosaic-md {
|
||||
.sp-participant-avatar {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
width: var(--sp-widget-width, 150px);
|
||||
height: var(--sp-widget-width, 150px);
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 8px 4px 4px;
|
||||
gap: 4px;
|
||||
|
||||
.sp-avatar__img {
|
||||
width: 91px;
|
||||
height: 91px;
|
||||
border-radius: 6px;
|
||||
flex-shrink: 0;
|
||||
.sp-avatar__shell {
|
||||
width: calc(var(--sp-widget-width, 150px) - 59px);
|
||||
height: calc(var(--sp-widget-width, 150px) - 59px);
|
||||
}
|
||||
|
||||
.sp-avatar__name {
|
||||
@@ -134,66 +136,63 @@
|
||||
}
|
||||
}
|
||||
|
||||
// ── Drag grip (top bar, replaces window header drag affordance) ────────────────
|
||||
.sp-strip__grip {
|
||||
width: 100%;
|
||||
height: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: grab;
|
||||
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) ─────────────────────────
|
||||
.sp-strip__close-btn {
|
||||
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);
|
||||
// ── Small tile shell sizing (all S layouts) ─────────────────────────────────
|
||||
// Base .sp-avatar__shell is 60×60 fixed — override to follow --sp-widget-width
|
||||
.scrying-pool.scrying-pool-strip.sp-layout-vertical-sm,
|
||||
.scrying-pool.scrying-pool-strip.sp-layout-horizontal-sm,
|
||||
.scrying-pool.scrying-pool-strip.sp-layout-mosaic-sm {
|
||||
.sp-participant-avatar .sp-avatar__shell {
|
||||
width: calc(var(--sp-widget-width) - 12px);
|
||||
height: calc(var(--sp-widget-width) - 12px);
|
||||
}
|
||||
&:active { opacity: 0.75; }
|
||||
}
|
||||
|
||||
// ── Toolbar row: toggle + Director's Board on the same line ───────────────────
|
||||
// ── Toolbar: grip + toggle + DB + close on one line ─────────────────────────
|
||||
// All chrome lives here; hidden at rest, revealed on strip hover.
|
||||
.sp-strip__toolbar {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
height: 24px;
|
||||
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 {
|
||||
width: 83px;
|
||||
min-width: 83px;
|
||||
height: 28px;
|
||||
height: 24px;
|
||||
min-width: 22px;
|
||||
width: 22px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -201,34 +200,27 @@
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
color: var(--sp-text, hsl(0, 0%, 80%));
|
||||
font-size: 11px;
|
||||
font-size: 10px;
|
||||
flex-shrink: 0;
|
||||
opacity: 0.6;
|
||||
|
||||
&:hover { opacity: 1; }
|
||||
}
|
||||
|
||||
// ── Director's Board CTA button (shown when sidebar injection not available) ──
|
||||
// Director's Board CTA button
|
||||
.sp-strip__directors-board-cta {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
height: 28px;
|
||||
width: 22px;
|
||||
height: 24px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 0 8px;
|
||||
justify-content: center;
|
||||
flex-shrink: 0;
|
||||
background: none;
|
||||
border: none;
|
||||
border-left: 1px solid rgba(255, 255, 255, 0.06);
|
||||
cursor: pointer;
|
||||
color: var(--sp-text-secondary, #7a8390);
|
||||
font-size: 11px;
|
||||
text-align: left;
|
||||
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 {
|
||||
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 {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
@@ -255,6 +276,12 @@
|
||||
color: var(--sp-text-muted, hsl(0, 0%, 60%));
|
||||
padding: 4px 8px;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s;
|
||||
|
||||
.scrying-pool-strip:hover & {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
@@ -263,7 +290,7 @@
|
||||
.sp-participant-avatar {
|
||||
position: relative;
|
||||
width: 83px;
|
||||
height: 83px;
|
||||
height: var(--sp-widget-width, 83px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
@@ -281,52 +308,30 @@
|
||||
}
|
||||
|
||||
.is-expanded & {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 135px; // 16:9 at 240 px strip width
|
||||
padding: 0;
|
||||
align-items: flex-end;
|
||||
background: hsl(220, 15%, 14%);
|
||||
height: auto;
|
||||
padding: 5px;
|
||||
background: transparent;
|
||||
|
||||
// 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;
|
||||
&:hover {
|
||||
background: hsl(220, 15%, 14%);
|
||||
}
|
||||
|
||||
.sp-avatar__img {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
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%);
|
||||
&::after { display: none; }
|
||||
|
||||
// Shell: sized to widget width, centered in the card
|
||||
.sp-avatar__shell {
|
||||
width: calc(var(--sp-widget-width) - 59px);
|
||||
height: calc(var(--sp-widget-width) - 59px);
|
||||
}
|
||||
|
||||
// No names displayed in vertical mode
|
||||
.sp-avatar__name,
|
||||
.sp-avatar__state-label {
|
||||
position: absolute;
|
||||
bottom: 6px;
|
||||
left: 8px;
|
||||
z-index: 3;
|
||||
color: hsla(0, 0%, 85%, 0.85);
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sp-avatar__corner-badge {
|
||||
@@ -339,23 +344,86 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Video container for WebRTC stream (full AV replacement mode)
|
||||
.sp-participant-video {
|
||||
// Border shell — no clip-path, no background. Serves only as the positioning
|
||||
// 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;
|
||||
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%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
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 {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border-radius: 6px;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@@ -365,7 +433,6 @@
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 6px;
|
||||
background: hsl(220, 15%, 18%);
|
||||
|
||||
.is-expanded & {
|
||||
@@ -398,48 +465,79 @@
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: var(--sp-text, hsl(0, 0%, 85%));
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s;
|
||||
|
||||
.sp-participant-avatar:hover & {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.sp-avatar__state-label {
|
||||
font-size: 0.7rem;
|
||||
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)
|
||||
// ============================================================
|
||||
// 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-self-muted {
|
||||
--sp-state-color: var(--sp-state-active);
|
||||
|
||||
.sp-avatar__img {
|
||||
box-shadow: 0 0 0 2px var(--sp-state-color);
|
||||
.sp-avatar__shell::after {
|
||||
box-shadow: inset 0 0 0 2px var(--sp-state-color);
|
||||
}
|
||||
}
|
||||
|
||||
.sp-participant-avatar.sp-state-hidden,
|
||||
.sp-participant-avatar.sp-state-cam-lost {
|
||||
--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-state-color: var(--sp-state-pending);
|
||||
|
||||
.sp-avatar__img {
|
||||
box-shadow: 0 0 0 2px var(--sp-state-color);
|
||||
.sp-avatar__shell::after {
|
||||
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)
|
||||
// ============================================================
|
||||
@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;
|
||||
}
|
||||
|
||||
@@ -449,13 +547,13 @@
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
@keyframes sp-revert-flash {
|
||||
0% { box-shadow: 0 0 0 3px var(--sp-urgency-director); }
|
||||
100% { box-shadow: 0 0 0 2px var(--sp-state-color); }
|
||||
0% { box-shadow: inset 0 0 0 3px var(--sp-urgency-director); }
|
||||
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
|
||||
.directors-board__preset-panel {
|
||||
background: linear-gradient(160deg, hsl(215,28%,13%) 0%, hsl(215,25%,10%) 100%);
|
||||
border: 1px solid var(--sp-border);
|
||||
border-radius: 6px;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: var(--sp-dialog-radius);
|
||||
padding: 10px 12px 12px;
|
||||
margin-top: 8px;
|
||||
|
||||
@@ -116,8 +116,8 @@
|
||||
.directors-board__preset-panel-select {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
background: var(--sp-surface);
|
||||
border: 1px solid var(--sp-border);
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: 4px;
|
||||
padding: 4px 6px;
|
||||
font-family: inherit;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
@import "tokens/_focus.less";
|
||||
|
||||
// ── Component styles ──────────────────────────────────────────────────────────
|
||||
@import "components/_buttons.less";
|
||||
@import "components/_participant-card.less";
|
||||
@import "components/_roster-strip.less";
|
||||
@import "components/_directors-board.less";
|
||||
|
||||
@@ -54,6 +54,39 @@
|
||||
--sp-radius-sm: 3px;
|
||||
--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 */
|
||||
--sp-focus: var(--sp-theme-focus, var(--color-focus-outline, #63c287));
|
||||
--sp-focus-ring: 0 0 0 2px var(--sp-focus);
|
||||
@@ -86,4 +119,8 @@
|
||||
--sp-theme-control: #1a1d20;
|
||||
--sp-theme-focus: #63c287;
|
||||
--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}}
|
||||
{{#each participants}}
|
||||
{{> "modules/scrying-pool/templates/participant-card.hbs"}}
|
||||
{{> "modules/scrying-pool/templates/participant-card.hbs" shape=../tileShape}}
|
||||
{{/each}}
|
||||
{{else}}
|
||||
<p class="directors-board__empty" role="listitem">
|
||||
@@ -78,6 +78,41 @@
|
||||
</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 --}}
|
||||
<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>
|
||||
@@ -85,7 +120,7 @@
|
||||
<div class="directors-board__widget-width-row">
|
||||
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.small"}}</span>
|
||||
<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>
|
||||
{{/each}}
|
||||
</select>
|
||||
@@ -93,7 +128,7 @@
|
||||
<div class="directors-board__widget-width-row">
|
||||
<span>{{localize "scrying-pool.directorsBoard.widgetWidth.large"}}</span>
|
||||
<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>
|
||||
{{/each}}
|
||||
</select>
|
||||
@@ -102,6 +137,13 @@
|
||||
</div>
|
||||
|
||||
<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">
|
||||
<button type="button" class="directors-board__footer-btn" data-action="save-preset"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.savePreset"}}">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{!-- 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"
|
||||
aria-label="{{cardAriaLabel}}"
|
||||
data-user-id="{{userId}}"
|
||||
|
||||
@@ -3,16 +3,6 @@
|
||||
role="complementary"
|
||||
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) --}}
|
||||
{{#if showFirstOpenTip}}
|
||||
<p class="sp-strip__first-tip">
|
||||
@@ -21,8 +11,12 @@
|
||||
</p>
|
||||
{{/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__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"
|
||||
aria-label="{{#if isExpanded}}Collapse Scrying Pool{{else}}Expand Scrying Pool{{/if}}"
|
||||
aria-expanded="{{isExpanded}}"
|
||||
@@ -33,15 +27,20 @@
|
||||
{{#if isGM}}
|
||||
<button class="sp-strip__directors-board-cta" data-action="open-directors-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>
|
||||
<span>Director's Board</span>
|
||||
</button>
|
||||
{{/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>
|
||||
|
||||
{{!-- Participant list --}}
|
||||
<ul class="sp-strip__participants" role="list" style="--sp-widget-width: {{widgetWidth}}px;">
|
||||
<ul class="sp-strip__participants" role="list">
|
||||
{{#if isEmpty}}
|
||||
{{!-- EmptyStatePanel --}}
|
||||
<li class="sp-strip__empty-state" role="listitem">
|
||||
@@ -52,7 +51,7 @@
|
||||
{{#each participants}}
|
||||
<li class="sp-strip__participant-item" role="listitem">
|
||||
{{!-- 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-action="open-popover"
|
||||
role="button"
|
||||
@@ -60,16 +59,20 @@
|
||||
data-tooltip="{{name}} — {{stateLabel}}"
|
||||
aria-pressed="false" style="width: {{../widgetWidth}}px; min-width: {{../widgetWidth}}px;">
|
||||
|
||||
{{!-- Video container for stream-access mode (full AV replacement) --}}
|
||||
{{#if hasStreamAccess}}
|
||||
<div class="sp-participant-video" aria-hidden="true"></div>
|
||||
{{/if}}
|
||||
<div class="sp-avatar__shell">
|
||||
<div class="sp-avatar__shape">
|
||||
{{!-- Video container for stream-access mode (full AV replacement) --}}
|
||||
{{#if hasStreamAccess}}
|
||||
<div class="sp-participant-video" aria-hidden="true"></div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Avatar image (32px rounded) - shown as fallback when no video --}}
|
||||
<img class="sp-avatar__img" src="{{avatarSrc}}" alt="" aria-hidden="true" />
|
||||
{{!-- Avatar image (32px rounded) - shown as fallback when no video --}}
|
||||
<img class="sp-avatar__img" src="{{avatarSrc}}" alt="" aria-hidden="true" />
|
||||
|
||||
{{!-- Corner badge (12px bottom-right) --}}
|
||||
<span class="sp-avatar__corner-badge" aria-hidden="true"></span>
|
||||
{{!-- Corner badge (12px bottom-right) --}}
|
||||
<span class="sp-avatar__corner-badge" aria-hidden="true"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Expanded view: name + state rows (vertical-md) --}}
|
||||
{{#if ../isExpanded}}
|
||||
|
||||
@@ -315,12 +315,12 @@ describe('ScryingPoolStrip', () => {
|
||||
});
|
||||
|
||||
describe('_computeStripWidth()', () => {
|
||||
it('returns 85 for vertical-sm', () => {
|
||||
expect(strip._computeStripWidth('vertical-sm', 3)).toBe(85);
|
||||
it('returns tileWidth + 11 for vertical-sm', () => {
|
||||
expect(strip._computeStripWidth('vertical-sm', 3)).toBe(83 + 8 + 3);
|
||||
});
|
||||
|
||||
it('returns 242 for vertical-md', () => {
|
||||
expect(strip._computeStripWidth('vertical-md', 3)).toBe(242);
|
||||
it('returns tileWidth + 11 for vertical-md', () => {
|
||||
expect(strip._computeStripWidth('vertical-md', 3)).toBe(150 + 8 + 3);
|
||||
});
|
||||
|
||||
it('returns 85 for unknown layout', () => {
|
||||
@@ -465,24 +465,20 @@ describe('ScryingPoolStrip', () => {
|
||||
vi.stubGlobal('document', originalDocument);
|
||||
});
|
||||
|
||||
it('removes video elements and cleans up streams', () => {
|
||||
it('removes video elements without stopping tracks', () => {
|
||||
const mockStream = new MediaStream();
|
||||
const mockTrack = { stop: vi.fn() };
|
||||
const mockVideoElement = {
|
||||
srcObject: mockStream,
|
||||
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]),
|
||||
});
|
||||
};
|
||||
|
||||
strip._cleanupVideoStreams();
|
||||
|
||||
expect(mockStream.getTracks).toHaveBeenCalled();
|
||||
expect(mockTrack.stop).toHaveBeenCalled();
|
||||
// Tracks are NOT stopped — they belong to FoundryVTT's WebRTC system
|
||||
expect(mockVideoElement.srcObject).toBe(null);
|
||||
expect(mockVideoElement.remove).toHaveBeenCalled();
|
||||
});
|
||||
@@ -493,18 +489,18 @@ describe('ScryingPoolStrip', () => {
|
||||
remove: vi.fn(),
|
||||
};
|
||||
|
||||
vi.stubGlobal('document', {
|
||||
strip.element = {
|
||||
querySelectorAll: vi.fn().mockReturnValue([mockVideoElement]),
|
||||
});
|
||||
};
|
||||
|
||||
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
||||
expect(mockVideoElement.remove).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('handles empty video element list', () => {
|
||||
vi.stubGlobal('document', {
|
||||
strip.element = {
|
||||
querySelectorAll: vi.fn().mockReturnValue([]),
|
||||
});
|
||||
};
|
||||
|
||||
expect(() => strip._cleanupVideoStreams()).not.toThrow();
|
||||
});
|
||||
|
||||