shadow_control.vue (7082B)
- <template>
- <div
- class="shadow-control"
- :class="{ disabled: !present }"
- >
- <div class="shadow-preview-container">
- <div
- :disabled="!present"
- class="y-shift-control"
- >
- <input
- v-model="selected.y"
- :disabled="!present"
- class="input input-number"
- type="number"
- >
- <div class="wrap">
- <input
- v-model="selected.y"
- :disabled="!present"
- class="input input-range"
- type="range"
- max="20"
- min="-20"
- >
- </div>
- </div>
- <div class="preview-window">
- <div
- class="preview-block"
- :style="style"
- />
- </div>
- <div
- :disabled="!present"
- class="x-shift-control"
- >
- <input
- v-model="selected.x"
- :disabled="!present"
- class="input input-number"
- type="number"
- >
- <div class="wrap">
- <input
- v-model="selected.x"
- :disabled="!present"
- class="input input-range"
- type="range"
- max="20"
- min="-20"
- >
- </div>
- </div>
- </div>
- <div class="shadow-tweak">
- <div
- :disabled="usingFallback"
- class="id-control style-control"
- >
- <Select
- id="shadow-switcher"
- v-model="selectedId"
- class="shadow-switcher"
- :disabled="!ready || usingFallback"
- >
- <option
- v-for="(shadow, index) in cValue"
- :key="index"
- :value="index"
- >
- {{ $t('settings.style.shadows.shadow_id', { value: index }) }}
- </option>
- </Select>
- <button
- class="btn button-default"
- :disabled="!ready || !present"
- @click="del"
- >
- <FAIcon
- fixed-width
- icon="times"
- />
- </button>
- <button
- class="btn button-default"
- :disabled="!moveUpValid"
- @click="moveUp"
- >
- <FAIcon
- fixed-width
- icon="chevron-up"
- />
- </button>
- <button
- class="btn button-default"
- :disabled="!moveDnValid"
- @click="moveDn"
- >
- <FAIcon
- fixed-width
- icon="chevron-down"
- />
- </button>
- <button
- class="btn button-default"
- :disabled="usingFallback"
- @click="add"
- >
- <FAIcon
- fixed-width
- icon="plus"
- />
- </button>
- </div>
- <div
- :disabled="!present"
- class="inset-control style-control"
- >
- <label
- for="inset"
- class="label"
- >
- {{ $t('settings.style.shadows.inset') }}
- </label>
- <input
- id="inset"
- v-model="selected.inset"
- :disabled="!present"
- name="inset"
- class="input -checkbox input-inset visible-for-screenreader-only"
- type="checkbox"
- >
- <label
- class="checkbox-label"
- for="inset"
- :aria-hidden="true"
- />
- </div>
- <div
- :disabled="!present"
- class="blur-control style-control"
- >
- <label
- for="spread"
- class="label"
- >
- {{ $t('settings.style.shadows.blur') }}
- </label>
- <input
- id="blur"
- v-model="selected.blur"
- :disabled="!present"
- name="blur"
- class="input input-range"
- type="range"
- max="20"
- min="0"
- >
- <input
- v-model="selected.blur"
- :disabled="!present"
- class="input input-number"
- type="number"
- min="0"
- >
- </div>
- <div
- :disabled="!present"
- class="spread-control style-control"
- >
- <label
- for="spread"
- class="label"
- >
- {{ $t('settings.style.shadows.spread') }}
- </label>
- <input
- id="spread"
- v-model="selected.spread"
- :disabled="!present"
- name="spread"
- class="input input-range"
- type="range"
- max="20"
- min="-20"
- >
- <input
- v-model="selected.spread"
- :disabled="!present"
- class="input input-number"
- type="number"
- >
- </div>
- <ColorInput
- v-model="selected.color"
- :disabled="!present"
- :label="$t('settings.style.common.color')"
- :fallback="currentFallback.color"
- :show-optional-tickbox="false"
- name="shadow"
- />
- <OpacityInput
- v-model="selected.alpha"
- :disabled="!present"
- />
- <i18n-t
- scope="global"
- keypath="settings.style.shadows.hintV3"
- tag="p"
- >
- <code>--variable,mod</code>
- </i18n-t>
- </div>
- </div>
- </template>
- <script src="./shadow_control.js"></script>
- <style lang="scss">
- .shadow-control {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- margin-bottom: 1em;
- .shadow-preview-container,
- .shadow-tweak {
- margin: 5px 6px 0 0;
- }
- .shadow-preview-container {
- flex: 0;
- display: flex;
- flex-wrap: wrap;
- input[type="number"] {
- width: 5em;
- min-width: 2em;
- }
- .x-shift-control,
- .y-shift-control {
- display: flex;
- flex: 0;
- &[disabled="disabled"] * {
- opacity: 0.5;
- }
- }
- .x-shift-control {
- align-items: flex-start;
- }
- .x-shift-control .wrap,
- input[type="range"] {
- margin: 0;
- width: 15em;
- height: 2em;
- }
- .y-shift-control {
- flex-direction: column;
- align-items: flex-end;
- .wrap {
- width: 2em;
- height: 15em;
- }
- input[type="range"] {
- transform-origin: 1em 1em;
- transform: rotate(90deg);
- }
- }
- .preview-window {
- flex: 1;
- background-color: #999;
- display: flex;
- align-items: center;
- justify-content: center;
- background-image:
- linear-gradient(45deg, #666 25%, transparent 25%),
- linear-gradient(-45deg, #666 25%, transparent 25%),
- linear-gradient(45deg, transparent 75%, #666 75%),
- linear-gradient(-45deg, transparent 75%, #666 75%);
- background-size: 20px 20px;
- background-position: 0 0, 0 10px, 10px -10px, -10px 0;
- border-radius: var(--roundness);
- .preview-block {
- width: 33%;
- height: 33%;
- border-radius: var(--roundness);
- }
- }
- }
- .shadow-tweak {
- flex: 1;
- min-width: 280px;
- .id-control {
- align-items: stretch;
- .shadow-switcher {
- flex: 1;
- }
- .shadow-switcher,
- .btn {
- min-width: 1px;
- margin-right: 5px;
- }
- .btn {
- padding: 0 0.4em;
- margin: 0 0.1em;
- }
- }
- }
- }
- </style>