* Add ellipsis icon * Reduce size of tokens * Move UpdateToast to toasts folder * Update variables.scss * Add reps for grid objects These reps act like the existing PartyRep except for Characters and Summons, as well as a new component just for Weapons. They only render the grid of objects and nothing else. Eventually PartyRep will use WeaponRep * Added RepSegment This is a Character, Weapon or Summon rep wrapped with an input and label for use in a SegmentedControl * Modify PartySegmentedControl to use RepSegments This will not work on mobile yet, where it should gracefully degrade to a normal SegmentedControl with only text * Extract URL copied and Remixed toasts into files * Extract delete team alert into a file Also, to support this: * Added `Destructive` class to Button * Added `primaryActionClassName` prop to Alert * Added an alert for when remixing teams * Began refactoring PartyDetails into several files * PartyHeader will live at the top, above the new segmented control * PartyDetails stays below, only showing remixed teams and the description * PartyDropdown handles the new ... menu * Remove duplicated code This is description and remix code that is still in `PartyDetails` * Small fixes for weapon grid * Add placeholder image for guidebooks * Add localizations * Add Guidebook type and update other types * Update gitignore Don't commit guidebook images * Indicate if a dialog is scrollable We had broken paging in the infinite scroll component. Turning off "scrolling" at the dialog levels fixes it without adding scrollbars in environments that persistently show them * Add ExtraContainer This is the purple container that will contain additional weapons and sephira guidebooks * Move ExtraWeapons to ExtraWeaponsGrid And put it in ExtraContainer * Added GuidebooksGrid and GuidebookUnit These are the display components for Guidebooks in the WeaponGrid * Visual adjustments to summon grid * Add Empty class to weapons when unit is unfilled * Implement GuidebooksGrid in WeaponGrid * Remove extra switch * Remove old dependencies and props * Implement searching for/adding guidebooks to party * Update styles * Fix dependency * Properly determine when extra container should display * Change to 1-indexing for guidebooks * Add support for removing guidebooks * Display guidebook validation error * Move read only buttons to PartyHeader Also broke up tokens and made them easier to render * Add guidebooks to DetailsObject * Remove preview when on mobile sizes
307 lines
6 KiB
SCSS
307 lines
6 KiB
SCSS
.Dialog {
|
|
position: fixed;
|
|
box-sizing: border-box;
|
|
background: none;
|
|
border: 0;
|
|
inset: 0;
|
|
display: grid;
|
|
padding: 0;
|
|
place-items: center;
|
|
min-height: 100vh;
|
|
min-width: 100vw;
|
|
overflow-y: auto;
|
|
color: inherit;
|
|
z-index: 40;
|
|
|
|
.DialogContent {
|
|
$multiplier: 4;
|
|
|
|
// animation: $duration-modal-open cubic-bezier(0.16, 1, 0.3, 1) 0s 1 normal
|
|
// none running openModalDesktop;
|
|
background: var(--dialog-bg);
|
|
border-radius: $card-corner;
|
|
box-sizing: border-box;
|
|
border: 0.5px solid rgba(0, 0, 0, 0.18);
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $unit * $multiplier;
|
|
height: auto;
|
|
min-width: $unit * 48;
|
|
// min-height: $unit-12x;
|
|
overflow-y: auto;
|
|
// height: 80vh;
|
|
max-height: 80vh;
|
|
min-width: 580px;
|
|
max-width: 42vw;
|
|
// padding: $unit * $multiplier;
|
|
position: relative;
|
|
|
|
a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
@include breakpoint(phone) {
|
|
// animation: slideUp;
|
|
// animation-duration: 3s;
|
|
// animation-fill-mode: forwards;
|
|
// animation-play-state: running;
|
|
// animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
min-width: inherit;
|
|
min-height: 90vh;
|
|
transform: initial;
|
|
left: 0;
|
|
right: 0;
|
|
top: 5vh;
|
|
height: auto;
|
|
width: 100%;
|
|
}
|
|
|
|
.Container {
|
|
overflow-y: hidden;
|
|
|
|
&.Scrollable {
|
|
overflow-y: auto;
|
|
}
|
|
}
|
|
|
|
.DialogHeader {
|
|
background: var(--dialog-bg);
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0);
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: $unit-2x;
|
|
justify-content: space-between;
|
|
padding: $unit-4x ($unit * $multiplier);
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 10;
|
|
|
|
&.Short {
|
|
padding-top: $unit-3x;
|
|
padding-bottom: $unit-3x;
|
|
}
|
|
|
|
.left {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-grow: 1;
|
|
gap: $unit;
|
|
|
|
p {
|
|
font-size: $font-small;
|
|
line-height: 1.25;
|
|
}
|
|
}
|
|
|
|
.DialogImage {
|
|
border-radius: $input-corner;
|
|
width: $unit-10x;
|
|
}
|
|
}
|
|
|
|
.DialogClose {
|
|
background: transparent;
|
|
border: none;
|
|
|
|
&:hover {
|
|
cursor: pointer;
|
|
|
|
svg {
|
|
fill: $error;
|
|
}
|
|
}
|
|
|
|
svg {
|
|
fill: $grey-50;
|
|
float: right;
|
|
height: 24px;
|
|
width: 24px;
|
|
}
|
|
}
|
|
|
|
.DialogTitle {
|
|
color: var(--text-primary);
|
|
font-size: $font-xlarge;
|
|
|
|
h1 {
|
|
color: var(--text-primary);
|
|
font-size: $font-xlarge;
|
|
font-weight: $medium;
|
|
text-align: left;
|
|
}
|
|
}
|
|
|
|
.DialogTop {
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex-grow: 1;
|
|
gap: calc($unit / 2);
|
|
|
|
.SubTitle {
|
|
color: var(--text-secondary);
|
|
font-size: $font-small;
|
|
font-weight: $medium;
|
|
}
|
|
}
|
|
|
|
.DialogDescription {
|
|
color: var(--text-secondary);
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.DialogFooter {
|
|
align-items: flex-end;
|
|
background: var(--dialog-bg);
|
|
bottom: 0;
|
|
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.16);
|
|
border-top: 1px solid rgba(0, 0, 0, 0.24);
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding: ($unit * 1.5) ($unit * $multiplier) $unit-3x;
|
|
position: sticky;
|
|
|
|
.Buttons {
|
|
display: flex;
|
|
gap: $unit;
|
|
|
|
&.Span {
|
|
width: 100%;
|
|
|
|
.Button {
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
&.Spaced {
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
}
|
|
}
|
|
}
|
|
|
|
.actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
width: 100%;
|
|
}
|
|
|
|
.Fields {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $unit-2x;
|
|
padding: 0 $unit-4x;
|
|
|
|
@include breakpoint(phone) {
|
|
gap: $unit-4x;
|
|
}
|
|
}
|
|
|
|
&.Conflict {
|
|
$weapon-diameter: 14rem;
|
|
|
|
.Content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $unit-4x;
|
|
padding: $unit-4x $unit-4x $unit-2x $unit-4x;
|
|
|
|
& > p {
|
|
font-size: $font-regular;
|
|
line-height: 1.4;
|
|
|
|
strong {
|
|
font-weight: $bold;
|
|
}
|
|
|
|
&:lang(ja) {
|
|
line-height: 1.4;
|
|
}
|
|
}
|
|
}
|
|
|
|
.weapon,
|
|
.character {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $unit;
|
|
text-align: center;
|
|
width: $weapon-diameter;
|
|
font-weight: $medium;
|
|
|
|
img {
|
|
border-radius: 1rem;
|
|
width: $weapon-diameter;
|
|
height: auto;
|
|
}
|
|
|
|
span {
|
|
line-height: 1.3;
|
|
}
|
|
}
|
|
|
|
.Diagram {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto 1fr;
|
|
align-items: flex-start;
|
|
|
|
&.CharacterDiagram {
|
|
align-items: center;
|
|
}
|
|
|
|
ul {
|
|
align-items: center;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: $unit-2x;
|
|
}
|
|
|
|
.wrapper {
|
|
display: flex;
|
|
justify-content: center;
|
|
width: 100%;
|
|
}
|
|
|
|
.arrow {
|
|
align-items: center;
|
|
color: $grey-55;
|
|
display: flex;
|
|
font-size: 4rem;
|
|
text-align: center;
|
|
height: $weapon-diameter;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
footer {
|
|
display: flex;
|
|
flex-direction: row;
|
|
gap: $unit;
|
|
|
|
.Button {
|
|
font-size: $font-regular;
|
|
padding: ($unit * 1.5) ($unit * 2);
|
|
width: 100%;
|
|
|
|
&.btn-disabled {
|
|
background: $grey-90;
|
|
color: $grey-70;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
&:not(.btn-disabled) {
|
|
background: $grey-90;
|
|
color: $grey-50;
|
|
|
|
&:hover {
|
|
background: $grey-80;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|