diff --git a/.styles/generic.css b/.styles/generic.css index 06b5592..c3b3f8d 100644 --- a/.styles/generic.css +++ b/.styles/generic.css @@ -49,10 +49,6 @@ .dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled { cursor: default; } -.dotdungeon > .window-content .debug-data { - opacity: 60%; - font-family: sans-serif; -} .dotdungeon.dotdungeon.dotdungeon.dotdungeon { container-type: size; @@ -61,17 +57,40 @@ padding: 0; background: #f2f2f2; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content .debug-data { + opacity: 60%; + font-family: sans-serif; + word-break: break-all; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button { border-radius: 4px; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary { background: #00aa00; color: black; - padding: 5px 7px; + padding: 4px 8px; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary:hover { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary:hover { background: #008800; color: white; } +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger { + background: red; + color: white; + padding: 4px 8px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover { + background: #cc0000; + color: white; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.reduced-padding { + padding: 2px 4px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding { + padding: 4px 4px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding.reduced-padding { + padding: 2px 2px; +} -/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;AAIF;EACC;EACA,aElDU;;;AFuDZ;EACC;;AAEA;EACC;EACA,YE1DW;;AF6DZ;EACC;;AAEA;EACC,YE9Dc;EF+Dd,OErDe;EFsDf;;AACA;EACC,YE7DiB;EF8DjB,OEpDkB%22,%22file%22:%22generic.css%22%7D */ +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YErDW;;AFuDX;EACC;EACA,aE3DS;EF4DT;;AAGD;EACC;;AAEA;EACC,YE9Da;EF+Db,OErDc;EFsDd;;AACA;EACC,YE7DgB;EF8DhB,OEpDiB;;AFwDnB;EACC,YEpDY;EFqDZ,OElDa;EFmDb;;AACA;EACC,YEvDe;EFwDf,OErDgB;;AFyDlB;EACC;;AAID;EACC;;AACA;EACC%22,%22file%22:%22generic.css%22%7D */ diff --git a/.styles/icons.css b/.styles/icons.css new file mode 100644 index 0000000..def1d2b --- /dev/null +++ b/.styles/icons.css @@ -0,0 +1,30 @@ +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--12 { + height: 12px; + width: 12px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--16 { + height: 16px; + width: 16px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--20 { + height: 20px; + width: 20px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--24 { + height: 24px; + width: 24px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--28 { + height: 28px; + width: 28px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--32 { + height: 32px; + width: 32px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--36 { + height: 36px; + width: 36px; +} + +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/icons.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAOG;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA%22,%22file%22:%22icons.css%22%7D */ diff --git a/.styles/root.css b/.styles/root.css index 7ca5a92..6c07f13 100644 --- a/.styles/root.css +++ b/.styles/root.css @@ -49,10 +49,6 @@ .dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled { cursor: default; } -.dotdungeon > .window-content .debug-data { - opacity: 60%; - font-family: sans-serif; -} .dotdungeon.dotdungeon.dotdungeon.dotdungeon { container-type: size; @@ -61,18 +57,70 @@ padding: 0; background: #f2f2f2; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content .debug-data { + opacity: 60%; + font-family: sans-serif; + word-break: break-all; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button { border-radius: 4px; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary { background: #00aa00; color: black; - padding: 5px 7px; + padding: 4px 8px; } -.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary:hover { +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary:hover { background: #008800; color: white; } +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger { + background: red; + color: white; + padding: 4px 8px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover { + background: #cc0000; + color: white; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.reduced-padding { + padding: 2px 4px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding { + padding: 4px 4px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding.reduced-padding { + padding: 2px 2px; +} + +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--12 { + height: 12px; + width: 12px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--16 { + height: 16px; + width: 16px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--20 { + height: 20px; + width: 20px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--24 { + height: 24px; + width: 24px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--28 { + height: 28px; + width: 28px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--32 { + height: 32px; + width: 32px; +} +.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--36 { + height: 36px; + width: 36px; +} .dotdungeon .stat { display: flex; @@ -146,6 +194,18 @@ padding: 4px; gap: 4px; } +.dotdungeon .actor--pc details { + border-radius: 4px; + background-color: rgba(0, 0, 0, 0.2); + padding: 4px; + margin-bottom: 8px; +} +.dotdungeon .actor--pc details summary { + cursor: pointer; +} +.dotdungeon .actor--pc details[open] .expanded-rotate { + transform: rotate(90deg); +} .dotdungeon .actor--pc .panel--profile { grid-area: profile; } @@ -366,4 +426,17 @@ resize: vertical; } -/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;AAIF;EACC;EACA,aElDU;;;AFuDZ;EACC;;AAEA;EACC;EACA,YE1DW;;AF6DZ;EACC;;AAEA;EACC,YE9Dc;EF+Dd,OErDe;EFsDf;;AACA;EACC,YE7DiB;EF8DjB,OEpDkB;;;AEvBtB;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ELlBD;EACA;EACA;EKkBE;EACA;EACA,aJrBU;EIsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAGC;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AD1LF;ECkMC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD1NL;ECoOC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC5PL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */ +.dotdungeon .item--spell { + padding: 4px; +} +.dotdungeon .item--spell input[type=text] { + font-size: 1.5em; + height: 1.5em; + width: 100%; +} +.dotdungeon .item--spell textarea { + width: 100%; + resize: vertical; +} + +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/icons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YErDW;;AFuDX;EACC;EACA,aE3DS;EF4DT;;AAGD;EACC;;AAEA;EACC,YE9Da;EF+Db,OErDc;EFsDd;;AACA;EACC,YE7DgB;EF8DhB,OEpDiB;;AFwDnB;EACC,YEpDY;EFqDZ,OElDa;EFmDb;;AACA;EACC,YEvDe;EFwDf,OErDgB;;AFyDlB;EACC;;AAID;EACC;;AACA;EACC;;;AI1FF;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ENlBD;EACA;EACA;EMkBE;EACA;EACA,aLrBU;EKsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AD3MF;ECmNC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD3OL;ECqPC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC7QL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */ diff --git a/.styles/sheets/actor/mvp.css b/.styles/sheets/actor/mvp.css index e92bf3e..2b46268 100644 --- a/.styles/sheets/actor/mvp.css +++ b/.styles/sheets/actor/mvp.css @@ -6,6 +6,18 @@ padding: 4px; gap: 4px; } +.dotdungeon .actor--pc details { + border-radius: 4px; + background-color: rgba(0, 0, 0, 0.2); + padding: 4px; + margin-bottom: 8px; +} +.dotdungeon .actor--pc details summary { + cursor: pointer; +} +.dotdungeon .actor--pc details[open] .expanded-rotate { + transform: rotate(90deg); +} .dotdungeon .actor--pc .panel--profile { grid-area: profile; } @@ -183,4 +195,4 @@ } } -/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAGC;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AC1LF;EDkMC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AC1NL;EDoOC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */ +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AC3MF;EDmNC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AC3OL;EDqPC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */ diff --git a/.styles/sheets/items/spell.css b/.styles/sheets/items/spell.css new file mode 100644 index 0000000..7747e6e --- /dev/null +++ b/.styles/sheets/items/spell.css @@ -0,0 +1,14 @@ +.dotdungeon .item--spell { + padding: 4px; +} +.dotdungeon .item--spell input[type=text] { + font-size: 1.5em; + height: 1.5em; + width: 100%; +} +.dotdungeon .item--spell textarea { + width: 100%; + resize: vertical; +} + +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22spell.css%22%7D */ diff --git a/langs/en-ca.json b/langs/en-ca.json index 3e6a60c..bcc87a7 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -74,7 +74,8 @@ "SyncSheet": { "basic": "Theme: Basic" }, - "AspectSheet": "Aspect Sheet" + "AspectSheet": "Aspect Sheet", + "SpellSheet": "Spell Sheet" }, "actor": { "pc": { @@ -184,6 +185,16 @@ "duration": "Duration (seconds)", "description": "Description", "send-to-chat": "Send Aspect to Chat" + }, + "spell": { + "name.placeholder": "Name...", + "cost.label": "Cost", + "description.label": "Description", + "aria": { + "name": "The spell's name", + "cost": "The amount of bytes it takes to cast the spell", + "description": "The details of the spell" + } } }, "notification": { diff --git a/module/config.mjs b/module/config.mjs index 1501331..ef03bf8 100644 --- a/module/config.mjs +++ b/module/config.mjs @@ -1,9 +1,22 @@ -export const DOTDUNGEON = {}; +const statDice = [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ]; -DOTDUNGEON.statDice = [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ]; +const trainingLevels = [``, `locked`, `+2`, `+4`]; -DOTDUNGEON.trainingLevels = [``, `locked`, `+2`, `+4`]; +const damageTypes = [ `slashing`, `piercing`, `smashing`, `gun`, `neon`, `shadow`, `solar` ]; -DOTDUNGEON.damageTypes = [ `slashing`, `piercing`, `smashing`, `gun`, `neon`, `shadow`, `solar` ]; +const ammoTypes = [`quivers`, `mags`, `cells`]; -DOTDUNGEON.ammoTypes = [`quivers`, `mags`, `cells`]; +const skills = { + build: [ "defense", "magic", "melee", "platforming", "strength", ], + meta: [ "alchemy", "arcanum", "dreams", "lore", "navigation", ], + presence: [ "animal_handling", "perception", "sneak", "speech", "vibes", ], + hands: [ "accuracy", "crafting", "engineering", "explosives", "piloting", ] +}; + +export default { + statDice, + trainingLevels, + damageTypes, + ammoTypes, + skills, +}; \ No newline at end of file diff --git a/module/documents/Actor/Handler.mjs b/module/documents/Actor/Handler.mjs index b6d4816..7a2757d 100644 --- a/module/documents/Actor/Handler.mjs +++ b/module/documents/Actor/Handler.mjs @@ -14,6 +14,11 @@ export class ActorHandler extends Actor { return this.actorTypes[this.type]; }; + updateEmbeddedDocument($event) { + if (!this.fn?.updateEmbeddedDocument) return; + this.fn.updateEmbeddedDocument.bind(this)($event); + }; + createCustomSpell() { if (!this.fn?.createCustomSpell) return; this.fn.createCustomSpell.bind(this)(); diff --git a/module/documents/Actor/Player.mjs b/module/documents/Actor/Player.mjs index 22f7b88..c3eba12 100644 --- a/module/documents/Actor/Player.mjs +++ b/module/documents/Actor/Player.mjs @@ -7,4 +7,10 @@ export class PlayerActor { description: ``, }; }; + + static async updateEmbeddedDocument($event) { + let data = $event.target.dataset; + let item = await fromUuid(data.embeddedId); + item?.update({ [data.embeddedUpdate]: $event.target.value }); + }; }; diff --git a/dotdungeon.mjs b/module/dotdungeon.mjs similarity index 60% rename from dotdungeon.mjs rename to module/dotdungeon.mjs index 37fe840..e9495d4 100644 --- a/dotdungeon.mjs +++ b/module/dotdungeon.mjs @@ -1,26 +1,27 @@ // Data Models -import { DescribedItemData } from "./module/models/Item/DescribedItemData.mjs"; -import { AspectItemData } from "./module/models/AspectItemData.mjs"; -import { PlayerData } from "./module/models/PlayerData.mjs"; -import { SyncData } from "./module/models/SyncData.mjs"; +import { AspectItemData } from "./models/AspectItemData.mjs"; +import { SpellItemData } from "./models/Item/Spell.mjs"; +import { PlayerData } from "./models/PlayerData.mjs"; +import { SyncData } from "./models/SyncData.mjs"; // Main Documents -import { ActorHandler } from "./module/documents/Actor/Handler.mjs"; +import { ActorHandler } from "./documents/Actor/Handler.mjs"; // Character Sheets -import { AspectSheet } from "./module/sheets/AspectSheet.mjs"; -import { PlayerSheet } from "./module/sheets/PlayerSheet.mjs"; -import { BasicSyncSheet } from "./module/sheets/SyncVariations/BasicSyncSheet.mjs"; +import { SpellSheet } from "./sheets/SpellSheet.mjs"; +import { AspectSheet } from "./sheets/AspectSheet.mjs"; +import { PlayerSheet } from "./sheets/PlayerSheet.mjs"; +import { BasicSyncSheet } from "./sheets/SyncVariations/BasicSyncSheet.mjs"; // Utility imports -import * as hbs from "./module/handlebars.mjs"; +import * as hbs from "./handlebars.mjs"; // Non-Setup hooks -import "./module/hooks/hotReload.mjs"; +import "./hooks/hotReload.mjs"; // Misc Imports -import loadSettings from "./module/settings/index.mjs"; -import { DOTDUNGEON } from "./module/config.mjs"; +import loadSettings from "./settings/index.mjs"; +import DOTDUNGEON from "./config.mjs"; Hooks.once(`init`, () => { @@ -31,7 +32,7 @@ Hooks.once(`init`, () => { CONFIG.Actor.dataModels.player = PlayerData; CONFIG.Actor.dataModels.sync = SyncData; CONFIG.Item.dataModels.aspect = AspectItemData; - CONFIG.Item.dataModels.spell = DescribedItemData; + CONFIG.Item.dataModels.spell = SpellItemData; CONFIG.Actor.documentClass = ActorHandler; CONFIG.DOTDUNGEON = DOTDUNGEON; @@ -53,6 +54,11 @@ Hooks.once(`init`, () => { types: ["aspect"], label: "dotdungeon.sheet-names.AspectSheet" }); + Items.registerSheet("dotdungeon", SpellSheet, { + makeDefault: true, + types: ["spell"], + label: "dotdungeon.sheet-names.SpellSheet" + }); hbs.registerHandlebarsHelpers(); hbs.preloadHandlebarsTemplates(); diff --git a/module/helpers/detailsExpanded.mjs b/module/helpers/detailsExpanded.mjs index bf9ddef..7d56e33 100644 --- a/module/helpers/detailsExpanded.mjs +++ b/module/helpers/detailsExpanded.mjs @@ -7,5 +7,6 @@ * @returns {"open"|null} The HTML insertion indicating the details is expanded */ export function detailsExpanded(expanded, collapseId) { + console.log(`.dungeon |`, collapseId, expanded) return expanded.has(collapseId) ? "open" : null; }; \ No newline at end of file diff --git a/module/helpers/schemaOptions.mjs b/module/helpers/schemaOptions.mjs index 7547589..24f3b78 100644 --- a/module/helpers/schemaOptions.mjs +++ b/module/helpers/schemaOptions.mjs @@ -1 +1,10 @@ -export function schemaOptions() {}; \ No newline at end of file +export function schemaOptions(document, schemaPath) { + let splitPath = schemaPath.split(`.`); + + let tempLocation = document.schema.fields.system; + for (const part of splitPath) { + tempLocation = tempLocation[part].fields + } + + return CONFIG.Actor.dataModels.player.schema.fields.weapon.fields.mainHand.fields.damage.options.options; +}; \ No newline at end of file diff --git a/module/models/Item/CommonItemData.mjs b/module/models/Item/CommonItemData.mjs index e1e1a24..1c41e12 100644 --- a/module/models/Item/CommonItemData.mjs +++ b/module/models/Item/CommonItemData.mjs @@ -2,11 +2,6 @@ export class CommonItemData extends foundry.abstract.DataModel { static defineSchema() { const fields = foundry.data.fields; return { - name: new fields.StringField({ - initial: ``, - blank: true, - trim: true, - }), cost: new fields.NumberField({ initial: null, nullable: true, diff --git a/module/models/Item/Spell.mjs b/module/models/Item/Spell.mjs new file mode 100644 index 0000000..b69138b --- /dev/null +++ b/module/models/Item/Spell.mjs @@ -0,0 +1,22 @@ +import { DescribedItemData } from "./DescribedItemData.mjs"; +import DOTDUNGEON from "../../config.mjs"; + +export class SpellItemData extends DescribedItemData { + static defineSchema() { + const fields = foundry.data.fields; + return mergeObject(super.defineSchema(), { + skill: new fields.StringField({ + initial: ``, + blank: true, + trim: true, + options() { + let skills = [ `` ]; + for (const group in DOTDUNGEON.skills) { + skills.push(...skills[group]); + }; + return skills; + }, + }), + }); + }; +}; \ No newline at end of file diff --git a/module/sheets/AspectSheet.mjs b/module/sheets/AspectSheet.mjs index 521c0b6..dd22b47 100644 --- a/module/sheets/AspectSheet.mjs +++ b/module/sheets/AspectSheet.mjs @@ -20,7 +20,7 @@ export class AspectSheet extends ItemSheet { console.debug(`.dungeon | Adding event listeners for Item: ${this.id}`); }; - getData() { + async getData() { const ctx = {}; const item = this.item.toObject(false); @@ -29,10 +29,6 @@ export class AspectSheet extends ItemSheet { ctx.system = item.system; ctx.flags = item.flags; - console.groupCollapsed(`AspectSheet.getData`); - console.log(`ctx`, ctx); - console.log(`item`, item); - console.groupEnd(); return ctx; }; }; \ No newline at end of file diff --git a/module/sheets/GenericActorSheet.mjs b/module/sheets/GenericActorSheet.mjs index ca8cb3f..063fd66 100644 --- a/module/sheets/GenericActorSheet.mjs +++ b/module/sheets/GenericActorSheet.mjs @@ -1,3 +1,6 @@ +import DOTDUNGEON from "../config.mjs"; +import { preloadIcons } from "../handlebars.mjs"; + export class GenericActorSheet extends ActorSheet { _expanded = new Set(); @@ -8,8 +11,8 @@ export class GenericActorSheet extends ActorSheet { `resourcesOrSupplies`, ]; - getData() { - const ctx = super.getData(); + async getData() { + const ctx = {}; // Send all of the settings that sheets need into their context ctx.settings = {}; @@ -24,6 +27,10 @@ export class GenericActorSheet extends ActorSheet { idp: this.actor.uuid, }; + ctx.actor = this.actor; + ctx.config = DOTDUNGEON; + ctx.icons = await preloadIcons(); + return ctx; }; diff --git a/module/sheets/GenericItemSheet.mjs b/module/sheets/GenericItemSheet.mjs new file mode 100644 index 0000000..04015af --- /dev/null +++ b/module/sheets/GenericItemSheet.mjs @@ -0,0 +1,42 @@ +import { preloadIcons } from "../handlebars.mjs"; + +export class GenericItemSheet extends ItemSheet { + _expanded = new Set(); + + #propogatedSettings = [ + `devMode`, + `showAvatarOnSheet`, + `playersCanChangeGroup`, + `resourcesOrSupplies`, + ]; + + activateListeners(html) { + super.activateListeners(html); + + if (this.document.isEmbedded) return; + if (!this.isEditable) return; + console.debug(`.dungeon | Adding event listeners for Generic Item: ${this.id}`); + }; + + async getData() { + const ctx = {}; + const item = this.item.toObject(false); + + // Send all of the settings that sheets need into their context + ctx.settings = {}; + for (const setting of this.#propogatedSettings) { + ctx.settings[setting] = game.settings.get(`dotdungeon`, setting); + }; + + ctx.isGM = game.users.current.hasRole(CONST.USER_ROLES.ASSISTANT); + + ctx.meta = { + expanded: this._expanded, + idp: this.actor.uuid, + }; + + ctx.icons = await preloadIcons(); + + return ctx; + }; +}; \ No newline at end of file diff --git a/module/sheets/PlayerSheet.mjs b/module/sheets/PlayerSheet.mjs index fc7c1e9..6d07e99 100644 --- a/module/sheets/PlayerSheet.mjs +++ b/module/sheets/PlayerSheet.mjs @@ -20,23 +20,23 @@ export class PlayerSheet extends GenericActorSheet { console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`); html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor)); + html.find(`[data-embedded-update]`) + .on(`change`, this.actor.updateEmbeddedDocument.bind(this.actor)); }; - getData() { - const ctx = super.getData(); + async getData() { + const ctx = await super.getData(); const actor = this.actor.toObject(false); ctx.system = actor.system; ctx.flags = actor.flags; + ctx.items = this.actor.itemTypes; ctx.computed = { canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM, }; - console.groupCollapsed(`PlayerSheet.getData`); - console.log(`ctx`, ctx); - console.log(`actor`, actor); - console.groupEnd(); + console.log(ctx) return ctx; }; }; \ No newline at end of file diff --git a/module/sheets/SpellSheet.mjs b/module/sheets/SpellSheet.mjs new file mode 100644 index 0000000..c16078b --- /dev/null +++ b/module/sheets/SpellSheet.mjs @@ -0,0 +1,36 @@ +import { GenericItemSheet } from "./GenericItemSheet.mjs"; + +export class SpellSheet extends GenericItemSheet { + static get defaultOptions() { + let opts = mergeObject( + super.defaultOptions, + { + template: `systems/dotdungeon/templates/items/spell.hbs`, + width: 280, + height: 340, + } + ); + opts.classes.push(`dotdungeon`); + return opts; + }; + + activateListeners(html) { + super.activateListeners(html); + + if (this.document.isEmbedded) return; + if (!this.isEditable) return; + console.debug(`.dungeon | Adding event listeners for Generic Item: ${this.id}`); + }; + + async getData() { + const ctx = {}; + const item = this.item.toObject(false); + + ctx.name = super.name; + ctx.item = item; + ctx.system = item.system; + ctx.flags = item.flags; + + return ctx; + }; +}; diff --git a/module/sheets/SyncVariations/AbstractSyncSheet.mjs b/module/sheets/SyncVariations/AbstractSyncSheet.mjs index 7837cfc..7af1899 100644 --- a/module/sheets/SyncVariations/AbstractSyncSheet.mjs +++ b/module/sheets/SyncVariations/AbstractSyncSheet.mjs @@ -16,8 +16,8 @@ export class AbstractSyncSheet extends GenericActorSheet { return opts; }; - getData() { - const ctx = super.getData(); + async getData() { + const ctx = await super.getData(); const actor = this.actor.toObject(false); ctx.system = actor.system; diff --git a/styles/_vars.scss b/styles/_vars.scss index 3d19c8a..057a85f 100644 --- a/styles/_vars.scss +++ b/styles/_vars.scss @@ -24,4 +24,10 @@ $text-on-primary-l20: black; $text-on-primary-d20: white; $text-on-primary-d40: white; $text-on-primary-d60: white; -$text-on-primary-d80: white; \ No newline at end of file +$text-on-primary-d80: white; + +$colour-danger: red; +$colour-danger-d20: color.scale($colour-danger, $lightness: -20%); + +$text-on-danger: white; +$text-on-danger-d20: white; \ No newline at end of file diff --git a/styles/generic.scss b/styles/generic.scss index ccf925e..219a6be 100644 --- a/styles/generic.scss +++ b/styles/generic.scss @@ -61,6 +61,7 @@ .debug-data { opacity: 60%; font-family: $body-font; + word-break: break-all; } button { @@ -69,12 +70,35 @@ &.primary { background: $colour-primary; color: $text-on-primary; - padding: 5px 7px; + padding: 4px 8px; &:hover { background: $colour-primary-d20; color: $text-on-primary-d20; } } + + &.danger { + background: $colour-danger; + color: $text-on-danger; + padding: 4px 8px; + &:hover { + background: $colour-danger-d20; + color: $text-on-danger-d20; + } + } + + &.reduced-padding { + padding: 2px 4px; + } + + + &.equal-padding { + padding: 4px 4px; + &.reduced-padding { + padding: 2px 2px; + } + } + } } } \ No newline at end of file diff --git a/styles/icons.scss b/styles/icons.scss new file mode 100644 index 0000000..3bf8363 --- /dev/null +++ b/styles/icons.scss @@ -0,0 +1,14 @@ +$iconSizes: 12, 16, 20, 24, 28, 32, 36; + +.dotdungeon.dotdungeon.dotdungeon.dotdungeon { + .icon { + + // The various icon sizes + @each $size in $iconSizes { + &--#{$size} { + height: #{$size}px; + width: #{$size}px; + }; + } + } +} \ No newline at end of file diff --git a/styles/root.scss b/styles/root.scss index cc79693..50c6fa9 100644 --- a/styles/root.scss +++ b/styles/root.scss @@ -3,6 +3,7 @@ @use "./vars.scss" as *; @use "./generic.scss"; +@use "./icons.scss"; @use "./sheets/partials/stat.scss"; @use "./sheets/partials/skill.scss"; @@ -10,4 +11,5 @@ @use "./sheets/actor/mvp.scss"; @use "./sheets/actor/sync/basic.scss"; -@use "./sheets/items/aspect.scss"; \ No newline at end of file +@use "./sheets/items/aspect.scss"; +@use "./sheets/items/spell.scss"; \ No newline at end of file diff --git a/styles/sheets/actor/mvp.scss b/styles/sheets/actor/mvp.scss index 8cf4bb7..1bad16d 100644 --- a/styles/sheets/actor/mvp.scss +++ b/styles/sheets/actor/mvp.scss @@ -21,6 +21,23 @@ padding: 4px; gap: 4px; + details { + border-radius: 4px; + background-color: rgba(0,0,0, 0.2); + padding: 4px; + margin-bottom: 8px; + + summary { + cursor: pointer; + } + + &[open] { + .expanded-rotate { + transform: rotate(90deg); + } + } + } + .panel { &--profile { grid-area: profile; diff --git a/styles/sheets/items/spell.scss b/styles/sheets/items/spell.scss new file mode 100644 index 0000000..21ba81b --- /dev/null +++ b/styles/sheets/items/spell.scss @@ -0,0 +1,16 @@ +@use "../../vars" as *; + +.dotdungeon .item--spell { + padding: 4px; + + input[type=text] { + font-size: 1.5em; + height: 1.5em; + width: 100%; + } + + textarea { + width: 100%; + resize: vertical; + } +} \ No newline at end of file diff --git a/system.json b/system.json index 22cc41d..a6349c7 100644 --- a/system.json +++ b/system.json @@ -16,7 +16,7 @@ ], "url": "https://github.com/Oliver-Akins/foundry.dungeon", "esmodules": [ - "dotdungeon.mjs" + "module/dotdungeon.mjs" ], "styles": [ ".styles/root.css" diff --git a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs index e788b1a..20551a0 100644 --- a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs +++ b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs @@ -1,35 +1,44 @@ {{#> dotdungeon.panel class="spells" title="dotdungeon.actor.pc.panel.spells"}} - {{#each system.spells as | spell |}} -
- - {{spell.name}} (Cost: {{spell.cost}}) + {{#each items.spell as | spell |}} +
+ + + {{spell.name}} + {{#if spell.system.cost }} + (Cost: {{spell.system.cost}}) + {{/if}} + + +
- +
- +
- {{spell.description}} -
-
- + +
@@ -37,10 +46,9 @@

You have no spells yet!

-
- {{dd-stringify system.spells}} -
{{/each}} + +

+
+ Items: +
{{dd-stringify items}}
+
+
System:
{{dd-stringify system}}
diff --git a/templates/items/aspect.hbs b/templates/items/aspect.hbs index dcfce9d..777aa21 100644 --- a/templates/items/aspect.hbs +++ b/templates/items/aspect.hbs @@ -15,7 +15,6 @@ name="system.deactivateAfter" value="{{system.deactivateAfter}}" > - {{dd-toFriendlyDuration system.deactivateAfter}}