Merge pull request #25370 from directus/florian/cms-1044-logical-properties

Add Stylelint and refactor to use logical properties
This commit is contained in:
Alex Gaillard
2025-07-10 15:33:56 -04:00
committed by GitHub
326 changed files with 3171 additions and 2695 deletions

View File

@@ -0,0 +1,5 @@
---
'@directus/app': minor
---
Added Stylelint and refactored the styles to take advantage of logical properties

View File

@@ -33,6 +33,25 @@ jobs:
- name: Run Linter
run: pnpm exec eslint ${{ steps.changed-files.outputs.all_changed_files }}
stylelint:
name: Stylelint
runs-on: ubuntu-latest
steps:
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare
uses: ./.github/actions/prepare
with:
build: false
- name: Run Stylelinter
run: pnpm exec stylelint '**/*.{css,scss,vue}' --ignore-path .gitignore
format:
name: Format
runs-on: ubuntu-latest

2
.gitignore vendored
View File

@@ -12,6 +12,7 @@ coverage/
**/.vitepress/cache/
**/.vitepress/.temp/
.eslintcache
.stylelintcache
# Dotenv configs
.env
@@ -26,6 +27,7 @@ debug
.devcontainer/
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
.idea/
*.code-workspace
.history/

54
.stylelintrc.json Normal file
View File

@@ -0,0 +1,54 @@
{
"extends": ["stylelint-config-standard"],
"plugins": ["stylelint-use-logical"],
"overrides": [
{
"files": ["**/*.scss"],
"extends": ["stylelint-config-standard-scss"]
},
{
"files": ["**/*.vue"],
"extends": ["stylelint-config-standard-scss", "stylelint-config-standard-vue/scss"]
}
],
"ignoreFiles": ["app/src/__histoire__/**", "docs/**"],
"rules": {
"alpha-value-notation": "number",
"at-rule-empty-line-before": [
"always",
{ "ignore": ["after-comment", "first-nested", "inside-block", "blockless-after-same-name-blockless"] }
],
"comment-empty-line-before": [
"always",
{
"except": ["first-nested"],
"ignore": ["after-comment", "stylelint-commands"]
}
],
"custom-property-empty-line-before": [
"always",
{ "except": ["after-comment", "after-custom-property", "first-nested"] }
],
"custom-property-pattern": null,
"declaration-empty-line-before": null,
"font-family-name-quotes": "always-unless-keyword",
"font-family-no-missing-generic-family-keyword": [true, { "ignoreFontFamilies": ["Material Symbols"] }],
"media-feature-range-notation": null,
"no-descending-specificity": null,
"property-no-vendor-prefix": [true, { "ignoreProperties": ["user-select", "appearance", "mask-image"] }],
"rule-empty-line-before": ["always", { "ignore": ["after-comment", "first-nested", "inside-block"] }],
"selector-class-pattern": null,
"selector-not-notation": null,
"selector-pseudo-element-no-unknown": [true, { "ignorePseudoElements": ["v-deep", "v-global", "v-slotted"] }],
"value-keyword-case": [
"lower",
{ "ignoreProperties": ["text-rendering"], "ignoreFunctions": ["v-bind"], "ignoreKeywords": ["currentColor"] }
],
"csstools/use-logical": "always"
}
}

View File

@@ -1,3 +1,9 @@
{
"recommendations": ["dbaeumer.vscode-eslint", "editorconfig.editorconfig", "esbenp.prettier-vscode", "vue.volar"]
"recommendations": [
"dbaeumer.vscode-eslint",
"stylelint.vscode-stylelint",
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"vue.volar"
]
}

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"stylelint.validate": ["css", "scss", "vue"]
}

View File

@@ -116,11 +116,11 @@ useSystem();
<style lang="scss" scoped>
:global(#app) {
height: 100%;
block-size: 100%;
}
#directus {
height: 100%;
block-size: 100%;
}
.hydrating {
@@ -129,8 +129,8 @@ useSystem();
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
backdrop-filter: blur(10px);
}
@@ -145,6 +145,6 @@ useSystem();
}
.error {
margin-bottom: 24px;
margin-block-end: 24px;
}
</style>

View File

@@ -2,6 +2,6 @@
exports[`Mount component 1`] = `
"<div data-v-f02f7ebf="" class="v-progress-linear danger">
<div data-v-f02f7ebf="" class="inner" style="width: 0%;"></div>Slot Content
<div data-v-f02f7ebf="" class="inner" style="inline-size: 0%;"></div>Slot Content
</div>"
`;

View File

@@ -1,8 +1,8 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Mount component 1`] = `
"<div data-v-c965220a="" class="v-workspace" style="width: 480px; height: 280px;">
<div data-v-c965220a="" class="workspace" style="transform: scale(1); width: 480px; height: 280px;">
"<div data-v-c965220a="" class="v-workspace" style="inline-size: 480px; block-size: 280px;">
<div data-v-c965220a="" class="workspace" style="transform: scale(1); inline-size: 480px; block-size: 280px;">
<v-workspace-tile-stub data-v-c965220a="" id="1" x="1" y="1" width="10" height="10" name="My Tile 1" edit-mode="false" resizable="true"></v-workspace-tile-stub>
<v-workspace-tile-stub data-v-c965220a="" id="2" x="15" y="5" width="10" height="10" name="My Tile 2" edit-mode="false" resizable="true"></v-workspace-tile-stub>
</div>

View File

@@ -12,12 +12,12 @@
transition: opacity var(--slow) var(--transition);
&.center > *:not(.v-overlay) {
transform: translateY(0px);
transform: translateY(0);
transition: transform var(--slow) var(--transition-in);
}
&.right > *:not(.v-overlay) {
transform: translateX(0px);
transform: translateX(0);
transition: transform var(--slow) var(--transition-in);
}
}

View File

@@ -1,13 +1,11 @@
import { capitalize } from 'lodash';
interface HTMLExpandElement extends HTMLElement {
_parent?: (Node & ParentNode & HTMLElement) | null;
_initialStyle?: {
transition: string;
visibility: string;
overflow: string;
height?: string | null;
width?: string | null;
blockSize?: string | null;
inlineSize?: string | null;
};
}
@@ -27,8 +25,9 @@ export default function (
...args: any[]
) => void,
): Record<string, any> {
const sizeProperty = xAxis ? 'width' : ('height' as 'width' | 'height');
const offsetProperty = `offset${capitalize(sizeProperty)}` as 'offsetHeight' | 'offsetWidth';
const sizeProperty = (xAxis ? 'inlineSize' : 'blockSize') as 'inlineSize' | 'blockSize';
const cssSizeProperty = (xAxis ? 'inline-size' : 'block-size') as 'inline-size' | 'block-size';
const offsetProperty = (xAxis ? 'offsetWidth' : 'offsetHeight') as 'offsetHeight' | 'offsetWidth';
return {
beforeEnter(el: HTMLExpandElement) {
@@ -60,7 +59,7 @@ export default function (
void el.offsetHeight; // force reflow
el.style.transition =
initialStyle.transition !== '' ? initialStyle.transition : `${sizeProperty} var(--medium) var(--transition)`;
initialStyle.transition !== '' ? initialStyle.transition : `${cssSizeProperty} var(--medium) var(--transition)`;
if (expandedParentClass && el._parent) {
el._parent.classList.add(expandedParentClass);
@@ -107,7 +106,7 @@ export default function (
void el.offsetHeight; // force reflow
el.style.transition =
initialStyle.transition !== '' ? initialStyle.transition : `${sizeProperty} var(--medium) var(--transition)`;
initialStyle.transition !== '' ? initialStyle.transition : `${cssSizeProperty} var(--medium) var(--transition)`;
if (expandedParentClass && el._parent) {
el._parent.classList.add(expandedParentClass);

View File

@@ -20,8 +20,8 @@ const show = ref(true);
<style>
.box {
background-color: var(--theme--background-normal);
height: 200px;
width: 400px;
block-size: 200px;
inline-size: 400px;
display: flex;
justify-content: center;
align-items: center;

View File

@@ -20,8 +20,8 @@ const show = ref(true);
<style>
.box {
background-color: var(--theme--background-normal);
height: 200px;
width: 400px;
block-size: 200px;
inline-size: 400px;
display: flex;
justify-content: center;
align-items: center;

View File

@@ -20,8 +20,8 @@ const show = ref(true);
<style>
.box {
background-color: var(--theme--background-normal);
height: 200px;
width: 400px;
block-size: 200px;
inline-size: 400px;
display: flex;
justify-content: center;
align-items: center;

View File

@@ -42,8 +42,8 @@ const sizeClass = useSizeClass(props);
display: flex;
align-items: center;
justify-content: center;
width: var(--v-avatar-size, 48px);
height: var(--v-avatar-size, 48px);
inline-size: var(--v-avatar-size, 48px);
block-size: var(--v-avatar-size, 48px);
overflow: hidden;
color: var(--theme--foreground-subdued);
white-space: nowrap;
@@ -75,8 +75,8 @@ const sizeClass = useSizeClass(props);
}
:slotted(img) {
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
object-fit: cover;
}
</style>

View File

@@ -62,15 +62,15 @@ withDefaults(
.badge {
position: absolute;
top: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-y, 0px));
right: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-x, 0px));
inset-block-start: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-y, 0px));
inset-inline-end: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-x, 0px));
z-index: 1;
display: inline-flex;
align-items: center;
justify-content: center;
width: max-content;
min-width: var(--v-badge-size, 16px);
height: var(--v-badge-size, 16px);
inline-size: max-content;
min-inline-size: var(--v-badge-size, 16px);
block-size: var(--v-badge-size, 16px);
padding: 0 5px;
color: var(--v-badge-color, var(--white));
font-weight: 800;
@@ -79,13 +79,13 @@ withDefaults(
border-radius: calc(var(--v-badge-size, 16px) / 2);
&.left {
right: unset;
left: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-x, 0px));
inset-inline-end: unset;
inset-inline-start: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-x, 0px));
}
&.bottom {
top: unset;
bottom: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-y, 0px));
inset-block-start: unset;
inset-block-end: calc(var(--v-badge-size, 16px) / -2 + var(--v-badge-offset-y, 0px));
}
&.bordered {
@@ -96,9 +96,9 @@ withDefaults(
}
&.dot {
width: var(--v-badge-size, 16px);
min-width: 0;
height: var(--v-badge-size, 16px);
inline-size: var(--v-badge-size, 16px);
min-inline-size: 0;
block-size: var(--v-badge-size, 16px);
border: 0;
* {

View File

@@ -160,7 +160,7 @@ defineProps<{
<style scoped>
.v-banner {
container-type: inline-size;
width: 100%;
inline-size: 100%;
padding: var(--theme--banner--padding);
border-radius: var(--theme--banner--border-radius);
background-color: var(--theme--banner--background);
@@ -172,8 +172,8 @@ defineProps<{
.avatar {
flex-shrink: 0;
width: 120px;
height: 120px;
inline-size: 120px;
block-size: 120px;
position: relative;
overflow: hidden;
align-items: center;

View File

@@ -15,7 +15,7 @@ interface Props {
rounded?: boolean;
/** No background */
outlined?: boolean;
/** Remove padding / min-width. Meant to be used with just an icon as content */
/** Remove padding / min-inline-size. Meant to be used with just an icon as content */
icon?: boolean;
/** Element type to be used */
type?: string;
@@ -267,7 +267,7 @@ async function onClick(event: MouseEvent) {
.v-button.full-width {
display: flex;
min-width: 100%;
min-inline-size: 100%;
}
body.dark .button {
@@ -280,9 +280,9 @@ body.dark .button {
position: relative;
display: flex;
align-items: center;
width: var(--v-button-width, auto);
min-width: var(--v-button-min-width, 140px);
height: var(--v-button-height, 44px);
inline-size: var(--v-button-width, auto);
min-inline-size: var(--v-button-min-width, 140px);
block-size: var(--v-button-height, 44px);
padding: var(--v-button-padding, 0 19px);
color: var(--v-button-color, var(--foreground-inverted));
font-weight: var(--v-button-font-weight, 600);
@@ -294,7 +294,7 @@ body.dark .button {
border-radius: var(--theme--border-radius);
cursor: pointer;
transition: var(--fast) var(--transition);
transition-property: background-color border;
transition-property: background-color, border;
}
.button:hover {
@@ -383,18 +383,18 @@ body.dark .button {
}
.icon {
width: var(--v-button-height, 44px);
min-width: 0;
inline-size: var(--v-button-height, 44px);
min-inline-size: 0;
padding: 0;
}
.button.full-width {
min-width: 100%;
min-inline-size: 100%;
}
.content,
.spinner {
max-width: 100%;
max-inline-size: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@@ -413,8 +413,8 @@ body.dark .button {
.spinner {
position: absolute;
top: 50%;
left: 50%;
inset-block-start: 50%;
inset-inline-start: 50%;
transform: translate(-50%, -50%);
}

View File

@@ -10,6 +10,6 @@
}
.v-card-actions > :slotted(.v-button + .v-button) {
margin-left: 12px;
margin-inline-start: 12px;
}
</style>

View File

@@ -4,8 +4,8 @@
<style lang="scss" scoped>
.v-card-subtitle {
margin-top: -16px;
margin-block-start: -16px;
padding: 16px;
padding-top: 0;
padding-block-start: 0;
}
</style>

View File

@@ -5,7 +5,6 @@
<style lang="scss" scoped>
.v-card-text {
padding: var(--v-card-padding, 16px);
padding-top: 0;
padding-bottom: 12px;
padding-block: 0 12px;
}
</style>

View File

@@ -7,7 +7,7 @@
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 4px;
margin-block-start: 4px;
padding: var(--v-card-padding, 16px);
font-weight: 600;
line-height: 1.6em;

View File

@@ -32,10 +32,10 @@ withDefaults(defineProps<Props>(), {
.v-card {
--theme--form--row-gap: 52px;
min-width: var(--v-card-min-width, none);
max-width: 400px;
height: auto;
max-height: 90vh;
min-inline-size: var(--v-card-min-width, none);
max-inline-size: 400px;
block-size: auto;
max-block-size: 90vh;
overflow: auto;
/* Page Content Spacing */
@@ -45,8 +45,8 @@ withDefaults(defineProps<Props>(), {
border-radius: var(--theme--border-radius);
& > :first-child {
border-top-left-radius: var(--theme--border-radius);
border-top-right-radius: var(--theme--border-radius);
border-start-start-radius: var(--theme--border-radius);
border-start-end-radius: var(--theme--border-radius);
}
&.disabled {

View File

@@ -421,6 +421,6 @@ function getRecursiveChildrenValues(mode: 'all' | 'branch' | 'leaf', children: R
<style scoped>
.item {
padding-left: 32px !important;
padding-inline-start: 32px !important;
}
</style>

View File

@@ -154,7 +154,7 @@ function onClickIcon(e: MouseEvent): void {
display: flex;
align-items: center;
font-size: 0;
text-align: left;
text-align: start;
background-color: transparent;
border: none;
border-radius: 0;
@@ -162,15 +162,15 @@ function onClickIcon(e: MouseEvent): void {
.label:not(:empty) {
flex-grow: 1;
margin-left: 8px;
margin-inline-start: 8px;
transition: color var(--fast) var(--transition);
@include mixins.no-wrap;
input {
width: 100%;
inline-size: 100%;
background-color: transparent;
border: none;
border-bottom: 2px solid var(--theme--form--field--input--border-color);
border-block-end: 2px solid var(--theme--form--field--input--border-color);
border-radius: 0;
}
}
@@ -197,8 +197,8 @@ function onClickIcon(e: MouseEvent): void {
--focus-ring-offset: var(--focus-ring-offset-invert);
position: relative;
width: 100%;
height: var(--theme--form--field--input--height);
inline-size: 100%;
block-size: var(--theme--form--field--input--height);
padding: 10px; // 14 - 4 (border)
background-color: var(--theme--form--field--input--background);
border: var(--theme--border-width) solid var(--theme--form--field--input--border-color);
@@ -211,11 +211,11 @@ function onClickIcon(e: MouseEvent): void {
&::before {
position: absolute;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
z-index: 0;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
border-radius: var(--theme--border-radius);
content: '';
}
@@ -266,7 +266,7 @@ function onClickIcon(e: MouseEvent): void {
}
.append {
margin-left: 8px;
margin-inline-start: 8px;
}
}
</style>

View File

@@ -109,7 +109,7 @@ function onCloseClick(event: MouseEvent) {
.v-chip {
display: inline-flex;
align-items: center;
height: 36px;
block-size: 36px;
padding: var(--v-chip-padding, 0 8px);
color: var(--v-chip-color, var(--theme--foreground));
font-weight: var(--weight-normal);
@@ -143,28 +143,28 @@ function onCloseClick(event: MouseEvent) {
}
&.x-small {
height: 20px;
block-size: 20px;
padding: var(--v-chip-padding, 0 6px);
font-size: 12px;
border-radius: 10px;
}
&.small {
height: 24px;
block-size: 24px;
padding: var(--v-chip-padding, 0 8px);
font-size: 14px;
border-radius: 12px;
}
&.large {
height: 44px;
block-size: 44px;
padding: var(--v-chip-padding, 0 20px);
font-size: 16px;
border-radius: 22px;
}
&.x-large {
height: 48px;
block-size: 48px;
padding: var(--v-chip-padding, 0 20px);
font-size: 18px;
border-radius: 24px;
@@ -181,13 +181,13 @@ function onCloseClick(event: MouseEvent) {
.close-outline {
position: relative;
right: -4px;
inset-inline-end: -4px;
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 14px;
margin-left: 4px;
inline-size: 14px;
block-size: 14px;
margin-inline-start: 4px;
background-color: var(--v-chip-close-color, var(--theme--danger));
border-radius: 10px;

View File

@@ -68,8 +68,8 @@ function toggle() {
<style lang="scss" scoped>
.activator {
display: block;
width: 100%;
text-align: left;
inline-size: 100%;
text-align: start;
}
.v-detail:not(.disabled) .v-divider {
@@ -81,10 +81,10 @@ function toggle() {
}
.v-icon {
margin-right: 4px;
margin-inline-end: 4px;
}
.content {
margin-top: 12px;
margin-block-start: 12px;
}
</style>

View File

@@ -128,12 +128,12 @@ function useOverlayFocusTrap() {
.container {
position: fixed;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
z-index: 500;
display: flex;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
&.keep-behind {
z-index: 490;
@@ -142,7 +142,7 @@ function useOverlayFocusTrap() {
.container > :slotted(*) {
z-index: 2;
box-shadow: 0px 4px 12px rgb(38 50 56 / 0.1);
box-shadow: 0 4px 12px rgb(38 50 56 / 0.1);
}
.container.center {
@@ -176,25 +176,24 @@ function useOverlayFocusTrap() {
}
.container :slotted(.v-card) .v-card-title {
padding-bottom: 8px;
padding-block-end: 8px;
}
.container :slotted(.v-card) .v-card-actions {
flex-direction: column-reverse;
flex-wrap: wrap;
flex-flow: column-reverse wrap;
}
.container :slotted(.v-card) .v-card-actions .v-button {
width: 100%;
inline-size: 100%;
}
.container :slotted(.v-card) .v-card-actions .v-button .button {
width: 100%;
inline-size: 100%;
}
.container :slotted(.v-card) .v-card-actions > .v-button + .v-button {
margin-bottom: 20px;
margin-left: 0;
margin-block-end: 20px;
margin-inline-start: 0;
}
.container :slotted(.v-sheet) {
@@ -217,16 +216,16 @@ function useOverlayFocusTrap() {
}
.container :slotted(.v-card) .v-card-actions .v-button {
width: auto;
inline-size: auto;
}
.container :slotted(.v-card) .v-card-actions .v-button .button {
width: auto;
inline-size: auto;
}
.container :slotted(.v-card) .v-card-actions > .v-button + .v-button {
margin-bottom: 0;
margin-left: 12px;
margin-block-end: 0;
margin-inline-start: 12px;
}
}

View File

@@ -37,9 +37,7 @@ withDefaults(defineProps<Props>(), {
*/
.v-divider {
flex-basis: 0px;
flex-grow: 1;
flex-shrink: 1;
flex: 1 1 0;
flex-wrap: wrap;
align-items: center;
overflow: visible;
@@ -47,8 +45,8 @@ withDefaults(defineProps<Props>(), {
hr {
flex-grow: 1;
order: 1;
max-width: 100%;
margin-top: 8px;
max-inline-size: 100%;
margin-block-start: 8px;
border: solid;
border-color: var(--v-divider-color, var(--theme--form--field--input--border-color));
border-width: var(--v-divider-thickness, var(--theme--border-width)) 0 0 0;
@@ -59,13 +57,13 @@ withDefaults(defineProps<Props>(), {
color: var(--v-divider-label-color, var(--theme--foreground-accent));
:slotted(.v-icon) {
margin-right: 4px;
margin-inline-end: 4px;
transform: translateY(-1px);
}
}
.type-text {
width: 100%;
inline-size: 100%;
color: var(--v-divider-label-color, var(--theme--foreground-accent));
font-weight: 600;
transition: color var(--fast) var(--transition);
@@ -82,7 +80,7 @@ withDefaults(defineProps<Props>(), {
span.wrapper {
order: 0;
margin-right: 8px;
margin-inline-end: 8px;
font-weight: 600;
font-size: 14px;
}
@@ -96,11 +94,11 @@ withDefaults(defineProps<Props>(), {
display: inline-flex;
flex-direction: column;
align-self: stretch;
height: 100%;
block-size: 100%;
hr {
width: 0px;
max-width: 0px;
inline-size: 0;
max-inline-size: 0;
border-width: 0 var(--theme--border-width) 0 0;
}

View File

@@ -146,9 +146,9 @@ const internalActive = computed({
position: relative;
display: flex;
flex-direction: column;
width: 100%;
max-width: 856px;
height: 100%;
inline-size: 100%;
max-inline-size: 856px;
block-size: 100%;
background-color: var(--theme--background);
.cancel {
@@ -156,8 +156,8 @@ const internalActive = computed({
display: none;
position: absolute;
top: 32px;
left: -76px;
inset-block-start: 32px;
inset-inline-start: -76px;
@media (min-width: 960px) {
display: inline-flex;
@@ -197,10 +197,10 @@ const internalActive = computed({
position: relative;
display: block;
flex-shrink: 0;
width: 220px;
height: 100%;
inline-size: 220px;
block-size: 100%;
background: var(--theme--navigation--background);
border-right: var(--theme--navigation--border-width) solid var(--theme--navigation--border-color);
border-inline-end: var(--theme--navigation--border-width) solid var(--theme--navigation--border-color);
}
.sidebar-content {
@@ -213,13 +213,11 @@ const internalActive = computed({
--v-list-item-background-color: var(--theme--navigation--list--background);
--v-list-item-background-color-hover: var(--theme--navigation--list--background-hover);
--v-list-item-background-color-active: var(--theme--navigation--list--background-active);
--v-divider-color: var(--theme--navigation--list--divider--border-color);
--v-divider-thickness: var(--theme--navigation--list--divider--border-width);
height: 100%;
overflow-x: hidden;
overflow-y: auto;
block-size: 100%;
overflow: hidden auto;
}
}
@@ -240,7 +238,7 @@ const internalActive = computed({
position: relative;
flex-grow: 1;
overflow: auto;
scroll-padding-top: 100px;
scroll-padding-block-start: 100px;
@media (min-width: 600px) {
--content-padding: 32px;
@@ -249,12 +247,12 @@ const internalActive = computed({
}
.main.small-search-input:deep(.search-input.filter-active) {
width: 300px !important;
inline-size: 300px !important;
}
}
@media (min-width: 960px) {
width: calc(100% - 64px);
inline-size: calc(100% - 64px);
}
}

View File

@@ -59,7 +59,7 @@ async function copyError() {
<style lang="scss" scoped>
.v-error {
max-height: 50vh;
max-block-size: 50vh;
padding: 6px 12px;
overflow: auto;
color: var(--theme--danger);
@@ -68,7 +68,7 @@ async function copyError() {
border-radius: var(--theme--border-radius);
.copy-error {
margin-left: 12px;
margin-inline-start: 12px;
}
}
</style>

View File

@@ -101,14 +101,14 @@ function toggle(item: Record<string, any>) {
z-index: 1;
display: flex;
align-items: center;
width: 100%;
margin-bottom: 8px;
inline-size: 100%;
margin-block-end: 8px;
padding: 12px;
background-color: var(--theme--background-normal);
border: var(--theme--border-width) solid var(--theme--background-normal);
border-radius: 6px;
backface-visibility: hidden;
text-align: left;
text-align: start;
transition-timing-function: var(--transition);
transition-duration: var(--fast);
transition-property: background-color, border-color;
@@ -125,9 +125,9 @@ function toggle(item: Record<string, any>) {
display: flex;
align-items: center;
justify-content: center;
width: 44px;
height: 44px;
margin-right: 12px;
inline-size: 44px;
block-size: 44px;
margin-inline-end: 12px;
background-color: var(--theme--background);
border-radius: 50%;
}

View File

@@ -308,7 +308,7 @@ function setContent() {
.content {
display: block;
flex-grow: 1;
height: 100%;
block-size: 100%;
padding: var(--theme--form--field--input--padding) 0;
overflow: hidden;
font-size: 14px;
@@ -316,8 +316,8 @@ function setContent() {
white-space: nowrap;
:deep(span) {
min-width: 1px;
min-height: 1em;
min-inline-size: 1px;
min-block-size: 1em;
white-space: pre;
}
@@ -345,8 +345,8 @@ function setContent() {
.placeholder {
position: absolute;
top: 50%;
left: 14px;
inset-block-start: 50%;
inset-inline-start: 14px;
color: var(--theme--foreground-subdued);
transform: translateY(-50%);
-webkit-user-select: none;

View File

@@ -97,11 +97,11 @@ const value = computed(() =>
.v-skeleton-loader {
position: absolute;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
z-index: 2;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
}
&.subdued {

View File

@@ -76,7 +76,7 @@ const { t } = useI18n();
.field-label {
position: relative;
display: flex;
margin-bottom: 8px;
margin-block-end: 8px;
color: var(--theme--form--field--label--foreground);
.v-text-overflow {
@@ -89,28 +89,28 @@ const { t } = useI18n();
}
.v-checkbox {
height: 18px; // Don't push down label with normal icon height (24px)
margin-right: 4px;
block-size: 18px; // Don't push down label with normal icon height (24px)
margin-inline-end: 4px;
}
.v-chip {
margin: 0;
flex-shrink: 0;
margin-left: 3px;
margin-inline-start: 3px;
}
.required {
--v-icon-color: var(--theme--primary);
margin-left: 3px;
margin-inline-start: 3px;
&.has-badge {
margin-right: 6px;
margin-inline-end: 6px;
}
}
.ctx-arrow {
margin-top: -3px;
margin-block-start: -3px;
color: var(--theme--foreground-subdued);
opacity: 0;
transition: opacity var(--fast) var(--transition);
@@ -131,10 +131,10 @@ const { t } = useI18n();
display: inline-flex;
align-items: center;
justify-content: center;
height: 24px;
width: 24px;
margin-top: -2px;
margin-left: 5px;
block-size: 24px;
inline-size: 24px;
margin-block-start: -2px;
margin-inline-start: 5px;
color: var(--theme--foreground-subdued);
transition: color var(--fast) var(--transition);
@@ -152,19 +152,19 @@ const { t } = useI18n();
&.edited {
.edit-dot {
position: absolute;
top: 7px;
left: -7px;
inset-block-start: 7px;
inset-inline-start: -7px;
display: block;
width: 4px;
height: 4px;
inline-size: 4px;
block-size: 4px;
background-color: var(--theme--foreground-subdued);
border-radius: 4px;
content: '';
}
.field-name {
margin-left: -16px;
padding-left: 16px;
margin-inline-start: -16px;
padding-inline-start: 16px;
}
}

View File

@@ -103,7 +103,7 @@ const setRawValue = () => {
.input-code {
:deep(.CodeMirror),
:deep(.CodeMirror-scroll) {
max-height: var(--input-height-max);
max-block-size: var(--input-height-max);
}
}
}

View File

@@ -241,8 +241,8 @@ function useComputedValues() {
.type-note {
position: relative;
display: block;
max-width: 520px;
margin-top: 4px;
max-inline-size: 520px;
margin-block-start: 4px;
:deep(a) {
color: var(--theme--primary);
@@ -265,12 +265,12 @@ function useComputedValues() {
.validation-error {
display: flex;
align-items: center;
margin-top: 4px;
margin-block-start: 4px;
color: var(--theme--danger);
font-style: italic;
}
.label-spacer {
height: 28px;
block-size: 28px;
}
</style>

View File

@@ -442,7 +442,7 @@ function useRawEditor() {
@include mixins.form-grid;
.first-visible-field :deep(.presentation-divider) {
margin-top: 0;
margin-block-start: 0;
}
&.inline > .no-fields-info {
@@ -451,8 +451,7 @@ function useRawEditor() {
}
.v-divider {
margin-bottom: 50px;
grid-column-start: 1;
grid-column-end: 3;
margin-block-end: 50px;
grid-column: 1 / 3;
}
</style>

View File

@@ -104,8 +104,8 @@ function showCustomValidationMessage(validationError: ValidationErrorWithDetails
<style lang="scss" scoped>
.validation-errors-list {
margin-top: 4px;
padding-left: 28px;
margin-block-start: 4px;
padding-inline-start: 28px;
.field {
cursor: pointer;
@@ -117,11 +117,11 @@ function showCustomValidationMessage(validationError: ValidationErrorWithDetails
.validation-error .v-icon {
vertical-align: text-top;
margin-left: 0 !important;
margin-inline-start: 0 !important;
}
li:not(:last-child) {
margin-bottom: 4px;
margin-block-end: 4px;
}
}
</style>

View File

@@ -33,9 +33,9 @@ defineProps<Props>();
.label {
position: absolute;
text-transform: uppercase;
left: 50%;
inset-inline-start: 50%;
transform: translateX(-50%);
top: 55%;
inset-block-start: 55%;
font-size: 12px;
font-weight: 800;
line-height: 1;
@@ -46,10 +46,10 @@ defineProps<Props>();
&.right {
.label {
background-color: var(--v-icon-file-background-color, var(--theme--background-normal));
left: calc(100% - 12px - 3ch);
text-align: left;
inset-inline-start: calc(100% - 12px - 3ch);
text-align: start;
transform: none;
padding-right: 8px;
padding-inline-end: 8px;
}
}
}

View File

@@ -101,9 +101,9 @@ function emitClick(event: MouseEvent) {
.v-icon {
position: relative;
display: inline-block;
width: var(--v-icon-size, 24px);
min-width: var(--v-icon-size, 24px);
height: var(--v-icon-size, 24px);
inline-size: var(--v-icon-size, 24px);
min-inline-size: var(--v-icon-size, 24px);
block-size: var(--v-icon-size, 24px);
color: var(--v-icon-color, currentColor);
font-size: 0;
vertical-align: middle;
@@ -149,8 +149,8 @@ function emitClick(event: MouseEvent) {
fill: currentColor;
&.svg-inline--fa {
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
}
}
@@ -185,18 +185,18 @@ function emitClick(event: MouseEvent) {
}
&.left {
margin-right: 8px;
margin-inline-end: 8px;
&.small {
margin-right: 4px;
margin-inline-end: 4px;
}
}
&.right {
margin-left: 6px;
margin-inline-start: 6px;
&.small {
margin-left: 4px;
margin-inline-start: 4px;
}
}
}

View File

@@ -42,9 +42,9 @@ withDefaults(defineProps<Props>(), {
display: flex;
align-items: center;
justify-content: center;
width: 100px;
height: 100px;
margin-bottom: 16px;
inline-size: 100px;
block-size: 100px;
margin-block-end: 16px;
border-radius: 50%;
}
@@ -69,23 +69,23 @@ withDefaults(defineProps<Props>(), {
}
.title {
margin-bottom: 8px;
margin-block-end: 8px;
}
.content {
max-width: 300px;
max-inline-size: 300px;
color: var(--theme--foreground-subdued);
line-height: 22px;
&:not(:last-child) {
margin-bottom: 24px;
margin-block-end: 24px;
}
}
.center {
position: absolute;
top: 50%;
left: 50%;
inset-block-start: 50%;
inset-inline-start: 50%;
transform: translate(-50%, -50%);
}
</style>

View File

@@ -360,11 +360,11 @@ function stepDown() {
display: flex;
align-items: center;
width: max-content;
height: var(--theme--form--field--input--height);
inline-size: max-content;
block-size: var(--theme--form--field--input--height);
.prepend-outer {
margin-right: 8px;
margin-inline-end: 8px;
}
.input {
@@ -372,10 +372,9 @@ function stepDown() {
display: flex;
flex-grow: 1;
align-items: center;
height: 100%;
block-size: 100%;
padding: var(--theme--form--field--input--padding);
padding-top: 0px;
padding-bottom: 0px;
padding-block: 0;
color: var(--v-input-color, var(--theme--form--field--input--foreground));
font-family: var(--v-input-font-family, var(--theme--fonts--sans--font-family));
background-color: var(--v-input-background-color, var(--theme--form--field--input--background));
@@ -386,15 +385,15 @@ function stepDown() {
box-shadow: var(--theme--form--field--input--box-shadow);
.prepend {
margin-right: 8px;
margin-inline-end: 8px;
}
.step-up {
margin-bottom: -8px;
margin-block-end: -8px;
}
.step-down {
margin-top: -8px;
margin-block-start: -8px;
}
.step-up,
@@ -452,17 +451,16 @@ function stepDown() {
.append {
flex-shrink: 0;
margin-left: 8px;
margin-inline-start: 8px;
}
}
input {
flex-grow: 1;
width: 20px; /* allows flex to grow/shrink to allow for slots */
height: 100%;
inline-size: 20px; /* allows flex to grow/shrink to allow for slots */
block-size: 100%;
padding: var(--theme--form--field--input--padding);
padding-right: 0px;
padding-left: 0px;
padding-inline: 0;
font-family: var(--v-input-font-family, var(--theme--fonts--sans--font-family));
background-color: transparent;
border: none;
@@ -490,7 +488,7 @@ function stepDown() {
}
&.small {
height: 38px;
block-size: 38px;
.input {
padding: 8px 12px;
@@ -498,10 +496,10 @@ function stepDown() {
}
&.full-width {
width: 100%;
inline-size: 100%;
.input {
width: 100%;
inline-size: 100%;
}
}
@@ -528,7 +526,7 @@ function stepDown() {
}
.append-outer {
margin-left: 8px;
margin-inline-start: 8px;
}
}
}

View File

@@ -114,16 +114,16 @@ function onClick(event: MouseEvent) {
<style lang="scss" scoped>
.v-list-group {
margin-bottom: 4px;
margin-block-end: 4px;
&:last-child {
margin-bottom: 0;
margin-block-end: 0;
}
.activator-icon {
--focus-ring-offset: 0;
margin-right: 0 !important;
margin-inline-end: 0 !important;
color: var(--theme--foreground-subdued);
transform: rotate(0deg);
transition: transform var(--medium) var(--transition);
@@ -138,7 +138,7 @@ function onClick(event: MouseEvent) {
}
.items {
padding-left: 18px;
padding-inline-start: 18px;
list-style: none;
}
}

View File

@@ -16,9 +16,7 @@
.v-list-item-content {
display: flex;
flex-basis: 0;
flex-grow: 1;
flex-shrink: 1;
flex: 1 1 0;
flex-wrap: wrap;
align-items: center;
align-self: center;
@@ -33,14 +31,12 @@
}
.v-list-item-content > :deep(*) {
flex-basis: 100%;
flex-grow: 1;
flex-shrink: 0;
flex: 1 0 100%;
line-height: 1.4;
}
.v-list-item-content > :slotted(*:not(:last-child)) {
margin-bottom: 2px;
margin-block-end: 2px;
}
.v-list:not(.nav) .v-list-item-content,

View File

@@ -25,11 +25,11 @@ withDefaults(defineProps<Props>(), {
&:not(:only-child) {
&:first-child {
margin-right: 12px;
margin-inline-end: 12px;
}
&:last-child {
margin-left: 12px;
margin-inline-start: 12px;
}
}
@@ -37,16 +37,15 @@ withDefaults(defineProps<Props>(), {
.v-list,
.v-list-item {
#{$this} {
margin-top: 4px;
margin-bottom: 4px;
margin-block: 4px;
&:not(:only-child) {
&:first-child {
margin-right: 16px;
margin-inline-end: 16px;
}
&:last-child {
margin-left: 16px;
margin-inline-start: 16px;
}
}
}

View File

@@ -32,11 +32,11 @@ withDefaults(defineProps<Props>(), {
&:not(:only-child) {
&:first-child {
margin-right: 12px;
margin-inline-end: 12px;
}
&:last-child {
margin-left: 12px;
margin-inline-start: 12px;
}
}
@@ -46,16 +46,15 @@ withDefaults(defineProps<Props>(), {
#{$this} {
--v-icon-color: var(--v-list-item-icon-color, var(--theme--foreground-subdued));
margin-top: 4px;
margin-bottom: 4px;
margin-block: 4px;
&:not(:only-child) {
&:first-child {
margin-right: 8px;
margin-inline-end: 8px;
}
&:last-child {
margin-left: 8px;
margin-inline-start: 8px;
}
}
}

View File

@@ -177,20 +177,18 @@ function onClick(event: PointerEvent) {
position: relative;
display: flex;
flex-basis: 100%;
flex-grow: 1;
flex-shrink: 1;
flex: 1 1 100%;
align-items: center;
width: 100%;
min-width: none;
max-width: none;
min-height: var(--v-list-item-min-height, 32px);
max-height: auto;
inline-size: 100%;
min-inline-size: 0;
max-inline-size: none;
min-block-size: var(--v-list-item-min-height, 32px);
max-block-size: none;
margin: var(--v-list-item-margin, 2px 0);
padding: var(--v-list-item-padding, 0 8px 0 calc(8px + var(--v-list-item-indent, 0px)));
overflow: hidden;
color: var(--v-list-item-color, var(--v-list-color, var(--theme--foreground)));
text-align: left;
text-align: start;
text-decoration: none;
border-radius: var(--v-list-item-border-radius, var(--theme--border-radius));
background-color: var(--v-list-item-background-color, var(--v-list-background-color, transparent));
@@ -199,10 +197,10 @@ function onClick(event: PointerEvent) {
&::after {
/* Borders normally render outside the element, this is a way of showing it as inner */
position: absolute;
top: 0;
left: 0;
width: calc(100% - 4px);
height: calc(100% - 4px);
inset-block-start: 0;
inset-inline-start: 0;
inline-size: calc(100% - 4px);
block-size: calc(100% - 4px);
border: var(--theme--border-width) dashed var(--theme--form--field--input--border-color);
content: '';
pointer-events: none;
@@ -283,7 +281,7 @@ function onClick(event: PointerEvent) {
);
position: relative;
display: flex;
height: var(--theme--form--field--input--height);
block-size: var(--theme--form--field--input--height);
margin: 0;
background-color: var(
--v-list-item-background-color,
@@ -329,12 +327,12 @@ function onClick(event: PointerEvent) {
}
& + & {
margin-top: var(--v-list-item-margin, 8px);
margin-block-start: var(--v-list-item-margin, 8px);
}
&.grow {
height: auto;
min-height: var(--theme--form--field--input--height);
block-size: auto;
min-block-size: var(--theme--form--field--input--height);
}
&.dense {
@@ -342,7 +340,7 @@ function onClick(event: PointerEvent) {
padding: calc(var(--theme--form--field--input--padding) / 4) calc(var(--theme--form--field--input--padding) / 2);
& + & {
margin-top: var(--v-list-item-margin, 4px);
margin-block-start: var(--v-list-item-margin, 4px);
}
}
}
@@ -357,16 +355,15 @@ function onClick(event: PointerEvent) {
padding: 0 8px;
&:first-child {
margin-top: 0;
margin-block-start: 0;
}
&:last-child {
margin-bottom: 0;
margin-block-end: 0;
}
&:only-child {
margin-top: 0;
margin-bottom: 0;
margin-block: 0;
}
}
}

View File

@@ -77,10 +77,10 @@ useGroupableParent(
.v-list {
position: static;
display: block;
min-width: var(--v-list-min-width, 220px);
max-width: var(--v-list-max-width, none);
min-height: var(--v-list-min-height, none);
max-height: var(--v-list-max-height, none);
min-inline-size: var(--v-list-min-width, 220px);
max-inline-size: var(--v-list-max-width, none);
min-block-size: var(--v-list-min-height, none);
max-block-size: var(--v-list-max-height, none);
padding: var(--v-list-padding, 4px 0);
overflow: auto;
color: var(--v-list-color, var(--theme--foreground-accent));
@@ -94,7 +94,7 @@ useGroupableParent(
}
:slotted(.v-divider) {
max-width: calc(100% - 16px);
max-inline-size: calc(100% - 16px);
margin: 8px;
}
</style>

View File

@@ -498,9 +498,9 @@ function usePopper(
.v-menu-popper {
position: fixed;
left: -999px;
inset-inline-start: -999px;
z-index: 600;
min-width: 100px;
min-inline-size: 100px;
transform: translateY(2px);
pointer-events: none;
@@ -518,21 +518,19 @@ function usePopper(
.arrow-triangle::before,
.arrow-triangle::after {
position: absolute;
width: 10px;
height: 10px;
inline-size: 10px;
block-size: 10px;
}
.arrow {
z-index: 1;
.arrow-triangle {
overflow-x: visible;
overflow-y: clip;
overflow: visible clip;
[data-placement^='left'] &,
[data-placement^='right'] & {
overflow-x: clip;
overflow-y: visible;
overflow: clip visible;
}
&::before,
@@ -560,54 +558,53 @@ function usePopper(
}
[data-placement^='top'] .arrow {
bottom: -10px;
inset-block-end: -10px;
.arrow-triangle {
&::before,
&::after {
bottom: 7px;
inset-block-end: 7px;
}
}
}
[data-placement^='bottom'] .arrow {
top: -10px;
inset-block-start: -10px;
.arrow-triangle {
&::before,
&::after {
top: 7px;
inset-block-start: 7px;
}
}
}
[data-placement^='right'] .arrow {
left: -10px;
inset-inline-start: -10px;
.arrow-triangle {
&::before,
&::after {
left: 7px;
inset-inline-start: 7px;
}
}
}
[data-placement^='left'] .arrow {
right: -10px;
inset-inline-end: -10px;
.arrow-triangle {
&::before,
&::after {
right: 7px;
inset-inline-end: 7px;
}
}
}
.v-menu-content {
max-height: v-bind(maxHeight);
max-block-size: v-bind(maxHeight);
padding: 0 4px;
overflow-x: hidden;
overflow-y: auto;
overflow: hidden auto;
background-color: var(--theme--popover--menu--background);
border: none;
border-radius: var(--theme--popover--menu--border-radius);

View File

@@ -58,8 +58,8 @@ const iconName = computed(() => {
display: flex;
align-items: center;
justify-content: flex-start;
width: auto;
min-height: var(--theme--form--field--input--height);
inline-size: auto;
min-block-size: var(--theme--form--field--input--height);
padding: 12px 16px;
color: var(--v-notice-color, var(--theme--foreground));
line-height: 22px;
@@ -72,10 +72,10 @@ const iconName = computed(() => {
content: '';
display: block;
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 4px;
block-size: 100%;
background-color: var(--v-notice-border-color, var(--theme--primary));
}
@@ -84,7 +84,7 @@ const iconName = computed(() => {
}
.v-icon.left {
margin-right: 16px;
margin-inline-end: 16px;
}
.success {

View File

@@ -39,14 +39,14 @@ function onClick(event: MouseEvent) {
.v-overlay {
position: fixed;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
z-index: var(--v-overlay-z-index, 600);
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
pointer-events: none;
&.has-click {
@@ -59,10 +59,10 @@ function onClick(event: MouseEvent) {
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 100%;
block-size: 100%;
background-color: var(--overlay-color);
opacity: 0;
transition: opacity var(--slow) var(--transition);

View File

@@ -165,11 +165,11 @@ function toPage(page: number) {
}
.v-button:first-child {
margin-left: 0;
margin-inline-start: 0;
}
.v-button:last-child {
margin-right: 0;
margin-inline-end: 0;
}
.v-button.active {

View File

@@ -74,8 +74,8 @@ const circleStyle = computed(() => ({
display: flex;
align-items: center;
justify-content: center;
width: var(--v-progress-circular-size, 28px);
height: var(--v-progress-circular-size, 28px);
inline-size: var(--v-progress-circular-size, 28px);
block-size: var(--v-progress-circular-size, 28px);
&.x-small {
--v-progress-circular-size: 12px;
@@ -101,10 +101,10 @@ const circleStyle = computed(() => ({
.circle {
position: absolute;
top: 0;
left: 0;
width: var(--v-progress-circular-size, 28px);
height: var(--v-progress-circular-size, 28px);
inset-block-start: 0;
inset-inline-start: 0;
inline-size: var(--v-progress-circular-size, 28px);
block-size: var(--v-progress-circular-size, 28px);
&-path {
transition: stroke-dasharray var(--v-progress-circular-transition, 400ms) ease-in-out;

View File

@@ -60,7 +60,7 @@ const color = computed(() => {
<div
class="inner"
:style="{
width: value + '%',
inlineSize: value + '%',
}"
/>
<slot :value="value" />
@@ -83,18 +83,18 @@ const color = computed(() => {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: var(--v-progress-linear-height, 4px);
inline-size: 100%;
block-size: var(--v-progress-linear-height, 4px);
overflow: hidden;
background-color: var(--v-progress-linear-background-color, var(--theme--form--field--input--border-color));
.inner {
position: absolute;
top: 0;
left: 0;
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
block-size: 100%;
background-color: var(--v-progress-linear-color, var(--theme--foreground));
transition: width 200ms ease-in-out;
transition: inline-size 200ms ease-in-out;
}
&.absolute {
@@ -102,7 +102,7 @@ const color = computed(() => {
}
&.bottom {
bottom: 0;
inset-block-end: 0;
}
&.fixed {
@@ -111,7 +111,7 @@ const color = computed(() => {
&.indeterminate .inner {
position: relative;
width: 100% !important;
inline-size: 100% !important;
transform-origin: left;
animation: indeterminate 2s infinite;
will-change: transform;
@@ -123,7 +123,7 @@ const color = computed(() => {
}
&.top {
top: 0;
inset-block-start: 0;
}
&.colorful {

View File

@@ -73,14 +73,14 @@ function emitValue(): void {
display: flex;
align-items: center;
font-size: 0;
text-align: left;
text-align: start;
background-color: transparent;
border: none;
border-radius: 0;
appearance: none;
.label:not(:empty) {
margin-left: 8px;
margin-inline-start: 8px;
@include mixins.no-wrap;
}
@@ -103,18 +103,18 @@ function emitValue(): void {
&.block {
position: relative;
width: 100%;
height: var(--theme--form--field--input--height);
inline-size: 100%;
block-size: var(--theme--form--field--input--height);
padding: calc(14px - 2 * var(--theme--border-width));
border: var(--theme--border-width) solid var(--theme--form--field--input--background-subdued);
border-radius: var(--theme--border-radius);
&::before {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
inset-block-start: 0;
inset-inline-start: 0;
inline-size: 100%;
block-size: 100%;
background-color: var(--theme--form--field--input--background-subdued);
border-radius: var(--theme--border-radius);
content: '';

View File

@@ -76,7 +76,7 @@ watch(
const finalWidth = width > maxWidth ? maxWidth : width;
target.style.width = `${finalWidth}px`;
target.style.inlineSize = `${finalWidth}px`;
},
{ immediate: true },
);
@@ -183,27 +183,26 @@ function onPointerUp() {
<style lang="scss" scoped>
.resize-wrapper {
position: relative;
max-height: 100%;
max-block-size: 100%;
&.transition {
:slotted(:first-child) {
transition: width var(--slow) var(--transition);
transition: inline-size var(--slow) var(--transition);
}
}
.grab-bar {
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 4px;
inset-block: 0;
inset-inline-end: 0;
inline-size: 4px;
z-index: 10;
background-color: var(--theme--primary);
cursor: ew-resize;
opacity: 0;
transform: translate(50%, 0);
transition: opacity var(--fast) var(--transition);
transition-delay: 0;
transition-delay: 0s;
-webkit-user-select: none;
user-select: none;
touch-action: none;
@@ -225,10 +224,8 @@ function onPointerUp() {
&::before {
content: '';
position: absolute;
top: 0;
right: 1px;
bottom: 0;
left: 1px;
inset-block: 0;
inset-inline: 1px;
background-color: var(--theme--border-color);
transition: background-color var(--fast) var(--transition);
}

View File

@@ -77,11 +77,10 @@ const isActive = computed(() => {
}
.item-text-margin {
margin-left: 32px;
margin-inline-start: 32px;
}
.color-dot {
margin-left: 6px;
margin-right: 6px;
margin-inline: 6px;
}
</style>

View File

@@ -452,8 +452,8 @@ function useDisplayValue() {
}
.inline-display {
width: max-content;
padding-right: 18px;
inline-size: max-content;
padding-inline-end: 18px;
&:not(.disabled) {
cursor: pointer;
@@ -462,7 +462,7 @@ function useDisplayValue() {
.inline-display.label {
padding: 4px 8px;
padding-right: 26px;
padding-inline-end: 26px;
color: var(--theme--foreground-subdued);
background-color: var(--theme--form--field--input--background-subdued);
border-radius: var(--theme--border-radius);
@@ -483,7 +483,6 @@ function useDisplayValue() {
}
.color-dot {
margin-left: 7px;
margin-right: 7px;
margin-inline: 7px;
}
</style>

View File

@@ -21,12 +21,12 @@
*/
.v-sheet {
width: var(--v-sheet-width, auto);
min-width: var(--v-sheet-min-width, none);
max-width: var(--v-sheet-max-width, none);
height: var(--v-sheet-height, auto);
min-height: var(--v-sheet-min-height, var(--theme--form--field--input--height));
max-height: var(--v-sheet-max-height, none);
inline-size: var(--v-sheet-width, auto);
min-inline-size: var(--v-sheet-min-width, none);
max-inline-size: var(--v-sheet-max-width, none);
block-size: var(--v-sheet-height, auto);
min-block-size: var(--v-sheet-min-height, var(--theme--form--field--input--height));
max-block-size: var(--v-sheet-max-height, none);
padding: var(--v-sheet-padding, 8px);
overflow: auto;
background-color: var(--v-sheet-background-color, var(--theme--form--field--input--background-subdued));

View File

@@ -40,11 +40,10 @@ withDefaults(defineProps<Props>(), {
&::after {
position: absolute;
top: 0;
right: 0;
left: 0;
inset-block-start: 0;
inset-inline: 0;
z-index: 1;
height: 100%;
block-size: 100%;
background: linear-gradient(90deg, transparent, var(--theme--background), transparent);
transform: translateX(-100%);
opacity: 0.5;
@@ -61,8 +60,8 @@ withDefaults(defineProps<Props>(), {
.input,
.input-tall {
width: 100%;
height: var(--theme--form--field--input--height);
inline-size: 100%;
block-size: var(--theme--form--field--input--height);
border: var(--theme--border-width) solid
var(--v-skeleton-loader-background-color, var(--theme--form--field--input--background-subdued));
border-radius: var(--theme--border-radius);
@@ -71,36 +70,36 @@ withDefaults(defineProps<Props>(), {
}
.input-tall {
height: var(--input-height-tall);
block-size: var(--input-height-tall);
}
.block-list-item {
width: 100%;
height: var(--theme--form--field--input--height);
inline-size: 100%;
block-size: var(--theme--form--field--input--height);
border-radius: var(--theme--border-radius);
@include loader;
& + & {
margin-top: 8px;
margin-block-start: 8px;
}
}
.block-list-item-dense {
width: 100%;
height: 44px;
inline-size: 100%;
block-size: 44px;
border-radius: var(--theme--border-radius);
@include loader;
& + & {
margin-top: 4px;
margin-block-start: 4px;
}
}
.text {
flex-grow: 1;
height: 12px;
block-size: 12px;
border-radius: 6px;
@include loader;
@@ -109,14 +108,14 @@ withDefaults(defineProps<Props>(), {
.list-item-icon {
display: flex;
align-items: center;
width: 100%;
height: 46px;
inline-size: 100%;
block-size: 46px;
.icon {
flex-shrink: 0;
width: 24px;
height: 24px;
margin-right: 12px;
inline-size: 24px;
block-size: 24px;
margin-inline-end: 12px;
border-radius: 50%;
@include loader;
@@ -124,7 +123,7 @@ withDefaults(defineProps<Props>(), {
.text {
flex-grow: 1;
height: 12px;
block-size: 12px;
border-radius: 6px;
@include loader;

View File

@@ -101,12 +101,12 @@ function onInput(event: Event) {
align-items: center;
.prepend {
margin-right: 8px;
margin-inline-end: 8px;
}
.slider {
position: relative;
top: -3px;
inset-block-start: -3px;
flex-grow: 1;
&.disabled {
@@ -115,12 +115,12 @@ function onInput(event: Event) {
}
&.thumb-label-visible {
margin-bottom: 30px;
margin-block-end: 30px;
}
input {
width: 100%;
height: 4px;
inline-size: 100%;
block-size: 4px;
padding: 8px 0;
background-color: var(--theme--background);
background-image: var(--v-slider-track-background-image);
@@ -129,7 +129,7 @@ function onInput(event: Event) {
appearance: none;
&::-webkit-slider-runnable-track {
height: 4px;
block-size: 4px;
background: var(--v-slider-color, var(--theme--form--field--input--border-color));
border: none;
border-radius: 4px;
@@ -137,7 +137,7 @@ function onInput(event: Event) {
}
&::-moz-range-track {
height: 4px;
block-size: 4px;
background: var(--v-slider-color, var(--theme--form--field--input--border-color));
border: none;
border-radius: 4px;
@@ -147,9 +147,9 @@ function onInput(event: Event) {
&::-webkit-slider-thumb {
position: relative;
z-index: 3;
width: 8px;
height: 8px;
margin-top: -2px;
inline-size: 8px;
block-size: 8px;
margin-block-start: -2px;
background: var(--theme--background);
border: none;
border-radius: 50%;
@@ -162,9 +162,9 @@ function onInput(event: Event) {
&::-moz-range-thumb {
position: relative;
z-index: 3;
width: 8px;
height: 8px;
margin-top: -2px;
inline-size: 8px;
block-size: 8px;
margin-block-start: -2px;
background: var(--v-slider-thumb-color, var(--theme--primary));
border: none;
border-radius: 50%;
@@ -177,12 +177,11 @@ function onInput(event: Event) {
.fill {
position: absolute;
top: 50%;
right: 0;
left: 0;
inset-block-start: 50%;
inset-inline: 0;
z-index: 2;
width: 100%;
height: 4px;
inline-size: 100%;
block-size: 4px;
background-color: var(--v-slider-fill-color, var(--theme--primary));
border-radius: 4px;
transform: translateY(-5px) scaleX(calc(var(--_v-slider-percentage) / 100));
@@ -192,14 +191,14 @@ function onInput(event: Event) {
.ticks {
position: absolute;
top: 14px;
left: 0;
inset-block-start: 14px;
inset-inline-start: 0;
z-index: 2;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 4px;
inline-size: 100%;
block-size: 4px;
padding: 0 7px;
opacity: 0;
transition: opacity var(--fast) var(--transition);
@@ -207,8 +206,8 @@ function onInput(event: Event) {
.tick {
display: inline-block;
width: 4px;
height: 4px;
inline-size: 4px;
block-size: 4px;
background-color: var(--v-slider-color, var(--theme--form--field--input--border-color));
border-radius: 50%;
}
@@ -216,9 +215,9 @@ function onInput(event: Event) {
.thumb-label-wrapper {
position: absolute;
top: 100%;
left: 7px;
width: calc(100% - 14px);
inset-block-start: 100%;
inset-inline-start: 7px;
inline-size: calc(100% - 14px);
overflow: visible;
pointer-events: none;
}
@@ -226,9 +225,9 @@ function onInput(event: Event) {
.thumb-label {
z-index: 1;
position: absolute;
top: 0px;
left: calc(var(--_v-slider-percentage) * 1%);
width: auto;
inset-block-start: 0;
inset-inline-start: calc(var(--_v-slider-percentage) * 1%);
inline-size: auto;
padding: 2px 6px;
color: var(--foreground-inverted);
font-weight: 600;
@@ -246,20 +245,20 @@ function onInput(event: Event) {
&:hover:not(.disabled),
&:focus-within:not(.disabled) {
input {
height: 4px;
block-size: 4px;
&::-webkit-slider-thumb {
width: 12px;
height: 12px;
margin-top: -4px;
inline-size: 12px;
block-size: 12px;
margin-block-start: -4px;
box-shadow: 0 0 0 4px var(--v-slider-thumb-color, var(--theme--primary));
cursor: ew-resize;
}
&::-moz-range-thumb {
width: 12px;
height: 12px;
margin-top: -4px;
inline-size: 12px;
block-size: 12px;
margin-block-start: -4px;
box-shadow: 0 0 0 4px var(--v-slider-thumb-color, var(--theme--primary));
cursor: ew-resize;
}
@@ -279,7 +278,7 @@ function onInput(event: Event) {
}
.append {
margin-left: 8px;
margin-inline-start: 8px;
}
}
</style>

View File

@@ -210,7 +210,7 @@ function toggleManualSort() {
</template>
<template #item="{ element: header }">
<th :class="getClassesForHeader(header)" class="cell" scope="col" :style="{ width: header.width + 'px' }">
<th :class="getClassesForHeader(header)" class="cell" scope="col" :style="{ inlineSize: header.width + 'px' }">
<v-menu v-if="hasHeaderContextMenuSlot" show-arrow placement="bottom-start">
<template #activator="{ toggle }">
<div class="content reorder-handle">
@@ -280,12 +280,12 @@ function toggleManualSort() {
.table-header {
.cell {
position: relative;
height: 50px; /* +2px for bottom border */
block-size: 50px; /* +2px for bottom border */
padding: 0 12px;
font-weight: 500;
font-size: 14px;
background-color: var(--v-table-background-color, var(--theme--background));
border-bottom: var(--theme--border-width) solid var(--theme--border-color-subdued);
border-block-end: var(--theme--border-width) solid var(--theme--border-color-subdued);
&.select {
--focus-ring-offset: var(--focus-ring-offset-invert);
@@ -300,12 +300,12 @@ function toggleManualSort() {
.content {
display: flex;
align-items: center;
height: 100%;
block-size: 100%;
color: var(--theme--foreground-accent);
font-weight: 600;
.header-btn {
width: 100%;
inline-size: 100%;
display: flex;
align-items: center;
justify-content: start;
@@ -330,7 +330,7 @@ function toggleManualSort() {
justify-content: center;
.header-btn {
width: auto;
inline-size: auto;
}
.name {
@@ -352,7 +352,7 @@ function toggleManualSort() {
position: relative;
.action-icon {
margin-left: 4px;
margin-inline-start: 4px;
color: var(--theme--foreground-subdued);
opacity: 0;
transition: opacity var(--fast) var(--transition);
@@ -384,12 +384,12 @@ function toggleManualSort() {
.select,
.manual {
padding-right: 0;
padding-inline-end: 0;
}
.fixed {
position: sticky;
top: var(--v-table-sticky-offset-top, 0);
inset-block-start: var(--v-table-sticky-offset-top, 0);
z-index: 3;
}
@@ -398,7 +398,7 @@ function toggleManualSort() {
.v-icon {
position: relative;
left: 2px;
inset-inline-start: 2px;
}
&.sorted-manually {
@@ -408,20 +408,20 @@ function toggleManualSort() {
.resize-handle {
position: absolute;
top: 0;
right: 0;
width: 5px;
height: 100%;
inset-block-start: 0;
inset-inline-end: 0;
inline-size: 5px;
block-size: 100%;
cursor: ew-resize;
transition: opacity var(--fast) var(--transition);
&::after {
position: relative;
top: 20%;
left: 3px;
inset-block-start: 20%;
inset-inline-start: 3px;
display: block;
width: var(--theme--border-width);
height: 60%;
inline-size: var(--theme--border-width);
block-size: 60%;
background-color: var(--theme--border-color-subdued);
content: '';
transition: background-color var(--fast) var(--transition);
@@ -440,19 +440,18 @@ function toggleManualSort() {
:deep(.header-order-ghost) {
&::after,
&::before {
width: 2px;
inline-size: 2px;
content: '';
display: block;
position: absolute;
right: 0;
top: 20%;
height: 60%;
inset-inline-end: 0;
inset-block-start: 20%;
block-size: 60%;
background-color: var(--theme--primary);
}
&::before {
right: auto;
left: 0;
inset-inline: 0 auto;
}
}
@@ -461,14 +460,14 @@ function toggleManualSort() {
}
.description-dot {
width: 8px;
height: 8px;
inline-size: 8px;
block-size: 8px;
background-color: var(--theme--foreground-subdued);
display: inline-block;
border-radius: 50%;
border: var(--theme--background) 6px solid;
box-sizing: content-box;
margin-right: 8px;
margin-inline-end: 8px;
vertical-align: middle;
}
</style>

View File

@@ -91,7 +91,7 @@ function onKeydown(e: KeyboardEvent) {
.table-row {
--focus-ring-offset: var(--focus-ring-offset-invert);
height: v-bind('cssHeight.tableRow');
block-size: v-bind('cssHeight.tableRow');
.cell {
display: flex;
@@ -101,7 +101,7 @@ function onKeydown(e: KeyboardEvent) {
white-space: nowrap;
text-overflow: ellipsis;
background-color: var(--v-table-background-color, transparent);
border-bottom: var(--theme--border-width) solid var(--theme--border-color-subdued);
border-block-end: var(--theme--border-width) solid var(--theme--border-color-subdued);
&:last-child {
padding: 0 12px;
@@ -141,10 +141,10 @@ function onKeydown(e: KeyboardEvent) {
}
:deep(.render-template) {
height: v-bind('cssHeight.tableRow');
block-size: v-bind('cssHeight.tableRow');
img {
height: v-bind('cssHeight.renderTemplateImage');
block-size: v-bind('cssHeight.renderTemplateImage');
}
}
}

View File

@@ -370,12 +370,12 @@ function updateSort(newSort: Sort) {
.v-table {
position: relative;
height: auto;
block-size: auto;
overflow-y: auto;
}
table {
min-width: 100%;
min-inline-size: 100%;
border-collapse: collapse;
border-spacing: 0;
}
@@ -404,7 +404,7 @@ table :deep(tr) {
table :deep(td.align-left),
table :deep(th.align-left) {
text-align: left;
text-align: start;
justify-content: start;
}
@@ -416,7 +416,7 @@ table :deep(th.align-center) {
table :deep(td.align-right),
table :deep(th.align-right) {
text-align: right;
text-align: end;
justify-content: end;
}
@@ -426,7 +426,7 @@ table :deep(.loading-indicator) {
}
table :deep(.loading-indicator > th) {
margin-right: var(--content-padding);
margin-inline-end: var(--content-padding);
}
table :deep(.sortable-ghost .cell) {
@@ -438,7 +438,7 @@ table :deep(.sortable-ghost .cell) {
}
.loading .loading-indicator {
height: auto;
block-size: auto;
padding: 0;
border: none;
}
@@ -448,9 +448,9 @@ table :deep(.sortable-ghost .cell) {
--v-progress-linear-color: var(--theme--form--field--input--border-color-hover);
position: absolute;
top: -2px;
left: 0;
width: 100%;
inset-block-start: -2px;
inset-inline-start: 0;
inline-size: 100%;
}
.loading .loading-indicator th {
@@ -459,7 +459,7 @@ table :deep(.sortable-ghost .cell) {
.loading .loading-indicator.sticky th {
position: sticky;
top: 48px;
inset-block-start: 48px;
z-index: 2;
}
@@ -481,7 +481,7 @@ table :deep(.sortable-ghost .cell) {
}
.inline table :deep(.table-row:last-of-type .cell) {
border-bottom: none;
border-block-end: none;
}
.disabled {

View File

@@ -54,12 +54,10 @@ function update(newSelection: readonly (string | number)[]) {
.v-tabs.horizontal :slotted(.v-tab) {
display: flex;
flex-basis: 0px;
flex-grow: 1;
flex-shrink: 0;
flex: 1 0 0;
align-items: center;
justify-content: center;
height: 38px;
block-size: 38px;
padding: 8px 20px;
cursor: pointer;
}

View File

@@ -301,9 +301,9 @@ function parseHTML(innerText?: string, isDirectInput = false) {
<style scoped lang="scss">
.v-template-input {
position: relative;
height: var(--theme--form--field--input--height);
block-size: var(--theme--form--field--input--height);
padding: var(--theme--form--field--input--padding);
padding-bottom: 32px;
padding-block-end: 32px;
overflow: hidden;
color: var(--theme--foreground);
font-family: var(--theme--fonts--sans--font-family);
@@ -320,7 +320,7 @@ function parseHTML(innerText?: string, isDirectInput = false) {
}
&.multiline {
height: var(--input-height-tall);
block-size: var(--input-height-tall);
overflow-y: auto;
white-space: pre-wrap;
}
@@ -335,7 +335,7 @@ function parseHTML(innerText?: string, isDirectInput = false) {
:deep(.preview) {
display: inline-block;
margin: 0px;
margin: 0;
padding: 2px 4px;
color: var(--theme--primary);
font-size: 0;

View File

@@ -12,7 +12,7 @@ interface Props {
modelValue?: string;
/** If the input is empty, return `null` instead of `''` */
nullable?: boolean;
/** Renders the textarea at regular input size, and expands to max-height on focus */
/** Renders the textarea at regular input size, and expands to max-block-size on focus */
expandOnFocus?: boolean;
/** Text to show when no input is entered */
placeholder?: string;
@@ -93,8 +93,8 @@ function trimIfEnabled() {
position: relative;
display: flex;
flex-direction: column;
width: max-content;
height: var(--input-height-tall);
inline-size: max-content;
block-size: var(--input-height-tall);
background-color: var(--theme--form--field--input--background);
border: var(--theme--border-width) solid var(--theme--form--field--input--border-color);
border-radius: var(--theme--border-radius);
@@ -108,8 +108,8 @@ function trimIfEnabled() {
}
&.expand-on-focus {
height: var(--theme--form--field--input--height);
transition: height var(--medium) var(--transition);
block-size: var(--theme--form--field--input--height);
transition: block-size var(--medium) var(--transition);
.append,
.prepend {
@@ -121,7 +121,7 @@ function trimIfEnabled() {
&:focus,
&:focus-within,
&.has-content {
height: var(--v-textarea-max-height);
block-size: var(--v-textarea-max-height);
.append,
.prepend {
@@ -132,7 +132,7 @@ function trimIfEnabled() {
}
&.full-width {
width: 100%;
inline-size: 100%;
}
&:hover:not(.disabled) {
@@ -150,8 +150,8 @@ function trimIfEnabled() {
position: relative;
display: block;
flex-grow: 1;
width: 100%;
height: var(--theme--form--field--input--height);
inline-size: 100%;
block-size: var(--theme--form--field--input--height);
padding: var(--theme--form--field--input--padding);
color: var(--theme--foreground);
font-family: var(--v-textarea-font-family, var(--theme--fonts--sans--font-family));

View File

@@ -406,7 +406,7 @@ defineExpose({ abort });
display: flex;
flex-direction: column;
justify-content: center;
min-height: var(--input-height-tall);
min-block-size: var(--input-height-tall);
padding: 32px;
color: var(--theme--foreground-subdued);
text-align: center;
@@ -427,24 +427,24 @@ defineExpose({ abort });
.actions {
display: flex;
justify-content: center;
margin-bottom: 18px;
margin-block-end: 18px;
.v-button {
margin-right: 12px;
margin-inline-end: 12px;
&:last-child {
margin-right: 0;
margin-inline-end: 0;
}
}
}
.browse {
position: absolute;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
display: block;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
cursor: pointer;
opacity: 0;
appearance: none;
@@ -461,7 +461,7 @@ defineExpose({ abort });
.upload-icon {
margin: 0 auto;
margin-bottom: 12px;
margin-block-end: 12px;
}
}
@@ -477,9 +477,9 @@ defineExpose({ abort });
.v-progress-linear {
position: absolute;
bottom: 30px;
left: 32px;
width: calc(100% - 64px);
inset-block-end: 30px;
inset-inline-start: 32px;
inline-size: calc(100% - 64px);
}
}
</style>

View File

@@ -379,8 +379,8 @@ function useDragDrop() {
.resize-details {
position: absolute;
bottom: 0;
right: 0;
inset-block-end: 0;
inset-inline-end: 0;
z-index: 2;
padding: 2px 11.5px 11.5px 2px;
color: var(--theme--foreground-subdued);
@@ -389,10 +389,10 @@ function useDragDrop() {
font-family: var(--theme--fonts--monospace--font-family);
font-style: normal;
line-height: 1;
text-align: right;
border-top-right-radius: var(--theme--border-radius);
border-bottom-right-radius: var(--theme--border-radius);
border-top-left-radius: var(--theme--border-radius);
text-align: end;
border-start-end-radius: var(--theme--border-radius);
border-end-end-radius: var(--theme--border-radius);
border-start-start-radius: var(--theme--border-radius);
background-color: var(--theme--background);
opacity: 0;
transition:
@@ -405,33 +405,33 @@ function useDragDrop() {
position: relative;
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
inline-size: 100%;
block-size: 100%;
overflow: hidden;
}
.tile-content.has-header {
height: calc(100% - 42px);
block-size: calc(100% - 42px);
}
.header {
display: flex;
align-items: center;
height: 42px;
block-size: 42px;
padding: 12px;
}
.footer {
padding: 0 12px;
border-top: 2px solid var(--theme--border-color-subdued);
margin-top: auto;
padding-top: 8px;
border-block-start: 2px solid var(--theme--border-color-subdued);
margin-block-start: auto;
padding-block-start: 8px;
}
.icon {
--v-icon-color: var(--theme--foreground-subdued);
margin-right: 4px;
margin-inline-end: 4px;
}
.name {
@@ -461,16 +461,16 @@ function useDragDrop() {
.edit-actions {
position: absolute;
top: 0;
right: 0;
inset-block-start: 0;
inset-inline-end: 0;
z-index: 2;
display: flex;
gap: 4px;
align-items: center;
padding: 7px;
border-top-right-radius: var(--theme--border-radius);
border-bottom-right-radius: var(--theme--border-radius);
border-bottom-left-radius: var(--theme--border-radius);
border-start-end-radius: var(--theme--border-radius);
border-end-end-radius: var(--theme--border-radius);
border-end-start-radius: var(--theme--border-radius);
background-color: var(--theme--background);
}
@@ -480,80 +480,80 @@ function useDragDrop() {
}
.resize-handlers .top {
top: -3px;
width: 100%;
height: 10px;
inset-block-start: -3px;
inline-size: 100%;
block-size: 10px;
cursor: ns-resize;
}
.resize-handlers .right {
top: 0;
right: -3px;
width: 10px;
height: 100%;
inset-block-start: 0;
inset-inline-end: -3px;
inline-size: 10px;
block-size: 100%;
cursor: ew-resize;
}
.resize-handlers .bottom {
bottom: -3px;
width: 100%;
height: 10px;
inset-block-end: -3px;
inline-size: 100%;
block-size: 10px;
cursor: ns-resize;
}
.resize-handlers .left {
top: 0;
left: -3px;
width: 10px;
height: 100%;
inset-block-start: 0;
inset-inline-start: -3px;
inline-size: 10px;
block-size: 100%;
cursor: ew-resize;
}
.resize-handlers .top-left {
top: -3px;
left: -3px;
width: 14px;
height: 14px;
inset-block-start: -3px;
inset-inline-start: -3px;
inline-size: 14px;
block-size: 14px;
cursor: nwse-resize;
}
.resize-handlers .top-right {
top: -3px;
right: -3px;
width: 14px;
height: 14px;
inset-block-start: -3px;
inset-inline-end: -3px;
inline-size: 14px;
block-size: 14px;
cursor: nesw-resize;
}
.resize-handlers .bottom-right {
right: -3px;
bottom: -3px;
width: 14px;
height: 14px;
inset-inline-end: -3px;
inset-block-end: -3px;
inline-size: 14px;
block-size: 14px;
cursor: nwse-resize;
}
.resize-handlers .bottom-left {
bottom: -3px;
left: -3px;
width: 14px;
height: 14px;
inset-block-end: -3px;
inset-inline-start: -3px;
inline-size: 14px;
block-size: 14px;
cursor: nesw-resize;
}
.br-tl {
border-top-left-radius: var(--theme--border-radius);
border-start-start-radius: var(--theme--border-radius);
}
.br-tr {
border-top-right-radius: var(--theme--border-radius);
border-start-end-radius: var(--theme--border-radius);
}
.br-br {
border-bottom-right-radius: var(--theme--border-radius);
border-end-end-radius: var(--theme--border-radius);
}
.br-bl {
border-bottom-left-radius: var(--theme--border-radius);
border-end-start-radius: var(--theme--border-radius);
}
</style>

View File

@@ -96,14 +96,14 @@ const workspaceBoxSize = computed(() => {
<div
class="v-workspace"
:class="{ editing: editMode }"
:style="{ width: workspaceBoxSize.width + 'px', height: workspaceBoxSize.height + 'px' }"
:style="{ inlineSize: workspaceBoxSize.width + 'px', blockSize: workspaceBoxSize.height + 'px' }"
>
<div
class="workspace"
:style="{
transform: `scale(${zoomScale})`,
width: workspaceSize.width + 'px',
height: workspaceSize.height + 'px',
inlineSize: workspaceSize.width + 'px',
blockSize: workspaceSize.height + 'px',
}"
>
<template v-if="!$slots.tile">
@@ -139,12 +139,12 @@ const workspaceBoxSize = computed(() => {
.workspace {
position: absolute;
left: var(--content-padding);
inset-inline-start: var(--content-padding);
display: grid;
grid-template-rows: repeat(auto-fill, 20px);
grid-template-columns: repeat(auto-fill, 20px);
min-width: calc(100%);
min-height: calc(100% - 120px);
min-inline-size: calc(100%);
min-block-size: calc(100% - 120px);
transform: scale(1);
transform-origin: top left;
@@ -159,11 +159,11 @@ const workspaceBoxSize = computed(() => {
.workspace::before {
position: absolute;
top: -4px;
left: -4px;
inset-block-start: -4px;
inset-inline-start: -4px;
display: block;
width: calc(100% + 8px);
height: calc(100% + 8px);
inline-size: calc(100% + 8px);
block-size: calc(100% + 8px);
background-image: radial-gradient(var(--theme--form--field--input--border-color) 10%, transparent 10%);
background-position: -6px -6px;
background-size: 20px 20px;

View File

@@ -34,7 +34,7 @@ function updateWidth(el: AutoWidthElement) {
const value = el.value || el.placeholder;
el.shadow.textContent = value;
el.style.width = `${el.shadow.scrollWidth}px`;
el.style.inlineSize = `${el.shadow.scrollWidth}px`;
}
function copyStyles(el: AutoWidthElement) {
@@ -42,10 +42,10 @@ function copyStyles(el: AutoWidthElement) {
Object.assign(el.shadow.style, {
position: 'absolute',
top: '0',
left: '0',
insetBlockStart: '0',
insetInlineStart: '0',
visibility: 'hidden',
height: '0',
blockSize: '0',
overflow: 'hidden',
whiteSpace: 'pre',
fontSize: styles.fontSize,
@@ -54,8 +54,8 @@ function copyStyles(el: AutoWidthElement) {
fontStyle: styles.fontStyle,
letterSpacing: styles.letterSpacing,
textTransform: styles.textTransform,
paddingRight: `calc(${styles.paddingRight} + ${styles.borderRightWidth})`,
paddingLeft: `calc(${styles.paddingLeft} + ${styles.borderLeftWidth})`,
paddingInlineEnd: `calc(${styles.paddingInlineEnd} + ${styles.borderInlineEndWidth})`,
paddingInlineStart: `calc(${styles.paddingInlineStart} + ${styles.borderInlineStartWidth})`,
});
}

View File

@@ -50,7 +50,7 @@ const styles = computed(() => {
align-items: center;
.v-icon {
margin-right: 4px;
margin-inline-end: 4px;
}
}
</style>

View File

@@ -47,8 +47,8 @@ const addBorder = computed(() => {
background-color: v-bind(color);
display: inline-block;
flex-shrink: 0;
width: 10px;
height: 10px;
inline-size: 10px;
block-size: 10px;
border-radius: 5px;
&.with-border {

View File

@@ -53,7 +53,7 @@ const imageThumbnail = computed(() => {
<style lang="scss" scoped>
img {
height: 100%;
block-size: 100%;
object-fit: cover;
border-radius: var(--theme--border-radius);
aspect-ratio: 1;
@@ -66,7 +66,7 @@ img {
display: inline-flex;
align-items: center;
justify-content: center;
height: 100%;
block-size: 100%;
overflow: hidden;
background-color: var(--theme--background-normal);
border-radius: var(--theme--border-radius);

View File

@@ -193,7 +193,7 @@ function matchNumber(left: number, right: number, operator: string) {
&.has-background,
&.has-border {
height: 28px;
block-size: 28px;
padding: 0 10px;
font-size: 14px;
line-height: 28px;

View File

@@ -37,8 +37,8 @@ const src = computed(() => {
<style lang="scss" scoped>
img {
display: inline-block;
width: auto;
height: 100%;
inline-size: auto;
block-size: 100%;
vertical-align: -30%;
border-radius: var(--theme--border-radius);

View File

@@ -111,7 +111,7 @@ const items = computed(() => {
}
.v-chip + .v-chip {
margin-left: 4px;
margin-inline-start: 4px;
}
.v-icon {
@@ -121,6 +121,6 @@ const items = computed(() => {
.inline-dot {
padding: 0 4px;
margin-right: 4px;
margin-inline-end: 4px;
}
</style>

View File

@@ -26,7 +26,7 @@ const starCount = computed(() => {
});
const ratingPercentage = computed(() => ({
width: (Number(props.value) / starCount.value) * 100 + '%',
inlineSize: (Number(props.value) / starCount.value) * 100 + '%',
}));
</script>
@@ -57,29 +57,29 @@ const ratingPercentage = computed(() => ({
border-radius: var(--theme--border-radius);
.v-icon {
margin-right: 4px;
margin-inline-end: 4px;
}
}
&.detailed {
position: relative;
width: min-content;
inline-size: min-content;
display: inline-flex;
height: var(--v-icon-size, 24px);
block-size: var(--v-icon-size, 24px);
.active {
position: relative;
z-index: 2;
display: inline-flex;
width: 0%;
inline-size: 0%;
overflow: hidden;
color: #ffc107;
}
.inactive {
position: absolute;
top: 0;
left: 0;
inset-block-start: 0;
inset-inline-start: 0;
z-index: 1;
display: inline-flex;
color: var(--theme--background-normal);

View File

@@ -110,16 +110,17 @@ function getLinkForItem(item: any) {
<style lang="scss" scoped>
.toggle {
position: relative;
--toggle-px: 6px;
--toggle-py: 4px;
&::before {
position: absolute;
top: calc(-1 * var(--toggle-py));
left: calc(-1 * var(--toggle-px));
inset-block-start: calc(-1 * var(--toggle-py));
inset-inline-start: calc(-1 * var(--toggle-px));
z-index: 1;
width: calc(100% + var(--toggle-px) * 2);
height: calc(100% + var(--toggle-py) * 2);
inline-size: calc(100% + var(--toggle-px) * 2);
block-size: calc(100% + var(--toggle-py) * 2);
background-color: var(--theme--background-normal);
border-radius: var(--theme--border-radius);
opacity: 0;
@@ -156,7 +157,7 @@ function getLinkForItem(item: any) {
.links {
.v-list-item-content {
height: var(--v-list-item-min-height, 32px);
block-size: var(--v-list-item-min-height, 32px);
}
}
</style>

View File

@@ -131,12 +131,12 @@ const translations = computed(() => {
<style lang="scss" scoped>
.v-list {
width: 300px;
inline-size: 300px;
}
.display-translations {
display: inline-flex;
max-width: 100%;
max-inline-size: 100%;
align-items: center;
.icon {
@@ -167,26 +167,25 @@ const translations = computed(() => {
}
.v-icon {
margin-right: 4px;
margin-inline-end: 4px;
}
.v-progress-linear {
flex: 1;
width: unset;
max-width: 100px;
inline-size: unset;
max-inline-size: 100px;
border-radius: 4px;
}
}
.v-list-item-content {
padding-top: 4px;
padding-bottom: 2px;
padding-block: 4px 2px;
}
.v-list-item:not(:first-child) {
.header {
padding-top: 8px;
border-top: var(--theme--border-width) solid var(--theme--border-color-subdued);
padding-block-start: 8px;
border-block-start: var(--theme--border-width) solid var(--theme--border-color-subdued);
}
}
</style>

View File

@@ -52,13 +52,13 @@ const src = computed(() => {
.user {
display: inline-flex;
align-items: center;
height: 100%;
block-size: 100%;
vertical-align: middle;
img {
display: inline-block;
width: auto;
height: 100%;
inline-size: auto;
block-size: 100%;
vertical-align: -67%;
border-radius: 4px;
@@ -69,7 +69,7 @@ const src = computed(() => {
&.both {
img {
margin-right: 8px;
margin-inline-end: 8px;
}
}
}

View File

@@ -134,8 +134,8 @@ const removeField = (field: string) => {
.toggle {
color: var(--theme--primary);
font-weight: 600;
margin-left: 10px;
margin-top: 6px;
margin-inline-start: 10px;
margin-block-start: 6px;
.v-icon {
position: absolute;

View File

@@ -229,12 +229,12 @@ defineExpose({
&.timestamp,
&.time,
&.dateTime {
min-width: 250px;
min-inline-size: 250px;
}
&.geometry,
&.json {
width: 500px;
inline-size: 500px;
}
}
@@ -244,7 +244,7 @@ input {
line-height: 1em;
background-color: var(--theme--form--field--input--background);
border: none;
max-width: 40ch;
max-inline-size: 40ch;
box-shadow: 0 4px 0 -2px v-bind(inputBorderColor);
&::placeholder {
@@ -256,10 +256,10 @@ input {
.dialog {
position: relative;
min-width: 800px;
min-inline-size: 800px;
}
.date-input {
min-width: 400px;
min-inline-size: 400px;
}
</style>

View File

@@ -329,15 +329,15 @@ function useVariableInput() {
--v-icon-color: var(--theme--foreground-subdued);
--v-icon-color-hover: var(--theme--foreground);
margin-right: 4px;
margin-inline-end: 4px;
.comparator + & {
margin-left: -4px;
margin-inline-start: -4px;
}
&.v-icon {
width: 24px !important;
height: 24px !important;
inline-size: 24px !important;
block-size: 24px !important;
border-radius: 50%;
display: flex;
justify-content: center;
@@ -360,10 +360,10 @@ function useVariableInput() {
.variable-input-braces {
font-family: var(--theme--fonts--monospace--font-family);
color: var(--theme--form--field--input--foreground-subdued);
margin-left: 2px;
margin-inline-start: 2px;
.variable-input + & {
margin-left: 0;
margin-inline-start: 0;
}
}
@@ -372,8 +372,7 @@ function useVariableInput() {
align-items: center;
.v-icon {
margin-right: 8px;
margin-left: 12px;
margin-inline: 12px 8px;
color: var(--theme--form--field--input--foreground-subdued);
cursor: pointer;
@@ -387,7 +386,7 @@ function useVariableInput() {
display: flex;
.value:not(:last-child)::after {
margin-right: 6px;
margin-inline-end: 6px;
content: ',';
}
}

View File

@@ -400,11 +400,11 @@ function isExistingField(node: Record<string, any>): boolean {
position: relative;
display: flex;
align-items: center;
width: fit-content;
margin-right: 18px;
margin-bottom: 8px;
inline-size: fit-content;
margin-inline-end: 18px;
margin-block-end: 8px;
padding: 2px 6px;
padding-right: 8px;
padding-inline-end: 8px;
background-color: var(--theme--form--field--input--background);
border: var(--theme--border-width) solid var(--theme--border-color-subdued);
border-radius: 100px;
@@ -414,7 +414,7 @@ function isExistingField(node: Record<string, any>): boolean {
color: var(--theme--form--field--input--foreground-subdued);
.key {
margin-right: 4px;
margin-inline-end: 4px;
padding: 2px 6px;
color: var(--theme--primary);
background-color: var(--theme--primary-background);
@@ -439,7 +439,7 @@ function isExistingField(node: Record<string, any>): boolean {
}
:deep(.inline-display) {
padding-right: 0px;
padding-inline-end: 0;
.v-icon {
display: none;
@@ -448,7 +448,7 @@ function isExistingField(node: Record<string, any>): boolean {
.plain-name {
display: inline-block;
margin-right: 8px;
margin-inline-end: 8px;
white-space: nowrap;
}
@@ -468,15 +468,15 @@ function isExistingField(node: Record<string, any>): boolean {
position: relative;
z-index: 2;
display: inline-block;
margin-right: 8px;
margin-inline-end: 8px;
&::before {
position: absolute;
top: 0px;
left: -4px;
inset-block-start: 0;
inset-inline-start: -4px;
z-index: -1;
width: calc(100% + 8px);
height: 100%;
inline-size: calc(100% + 8px);
block-size: 100%;
background-color: var(--theme--background-normal);
border-radius: 6px;
opacity: 0;
@@ -503,9 +503,9 @@ function isExistingField(node: Record<string, any>): boolean {
--v-icon-color-hover: var(--theme--danger);
position: absolute;
top: 50%;
left: 100%;
padding-left: 4px;
inset-block-start: 50%;
inset-inline-start: 100%;
padding-inline-start: 4px;
transform: translateY(-50%);
opacity: 0;
transition: opacity var(--fast) var(--transition);
@@ -525,18 +525,18 @@ function isExistingField(node: Record<string, any>): boolean {
.drag-handle {
--v-icon-color: var(--theme--form--field--input--foreground-subdued);
margin-right: 4px;
margin-inline-end: 4px;
cursor: grab;
}
&.inline {
width: auto;
margin-right: 0;
padding-right: 12px;
inline-size: auto;
margin-inline-end: 0;
padding-inline-end: 12px;
.delete {
right: 8px;
left: unset;
inset-inline-end: 8px;
inset-inline-start: unset;
background-color: var(--theme--background);
}
}
@@ -544,12 +544,12 @@ function isExistingField(node: Record<string, any>): boolean {
.node {
&.logic {
padding-right: 4px;
padding-inline-end: 4px;
white-space: nowrap;
}
&.field {
padding-right: 4px;
padding-inline-end: 4px;
}
}

View File

@@ -258,22 +258,22 @@ function addKeyAsNode() {
}
:deep(.group) {
margin-left: 18px;
padding-left: 10px;
border-left: var(--theme--border-width) solid var(--theme--border-color-subdued);
margin-inline-start: 18px;
padding-inline-start: 10px;
border-inline-start: var(--theme--border-width) solid var(--theme--border-color-subdued);
}
.v-list {
min-width: auto;
margin: 0px 0px 10px;
min-inline-size: auto;
margin: 0 0 10px;
padding: 20px 20px 12px;
border: var(--theme--border-width) solid var(--theme--border-color-subdued);
background: var(--theme--form--field--input--background);
& > :deep(.group) {
margin-left: 0px;
padding-left: 0px;
border-left: none;
margin-inline-start: 0;
padding-inline-start: 0;
border-inline-start: none;
}
}
@@ -290,9 +290,8 @@ function addKeyAsNode() {
.v-list {
display: flex;
align-items: center;
height: var(--theme--form--field--input--height);
padding-top: 0;
padding-bottom: 0;
block-size: var(--theme--form--field--input--height);
padding-block: 0;
}
.no-rules {
@@ -325,8 +324,8 @@ function addKeyAsNode() {
.add-filter {
display: flex;
align-items: center;
width: 100%;
height: 30px;
inline-size: 100%;
block-size: 30px;
padding: 0;
color: var(--theme--form--field--input--foreground-subdued);
background-color: var(--theme--form--field--input--background);
@@ -344,12 +343,10 @@ function addKeyAsNode() {
}
}
.add {
margin-left: 6px;
margin-right: 4px;
margin-inline: 6px 4px;
}
.expand_more {
margin-left: auto;
margin-right: 6px;
margin-inline: auto 6px;
transition: transform var(--medium) var(--transition-out);
}
}
@@ -364,7 +361,7 @@ function addKeyAsNode() {
}
button + button {
margin-left: 24px;
margin-inline-start: 24px;
}
}

View File

@@ -89,8 +89,9 @@ const clicked = (toggleTooltip: () => void) => {
<style lang="scss" scoped>
.v-list {
width: 300px;
inline-size: 300px;
}
.custom-translations-display {
display: flex;
align-items: center;
@@ -108,13 +109,14 @@ const clicked = (toggleTooltip: () => void) => {
}
.translation-display-text {
margin-right: 4px;
margin-inline-end: 4px;
padding: 2px 0;
}
.translation-item-text {
padding-top: 2px;
padding-block-start: 2px;
}
.translation-display-text,
.translation-item-text {
overflow: hidden;
@@ -135,26 +137,25 @@ const clicked = (toggleTooltip: () => void) => {
}
.v-icon {
margin-right: 4px;
margin-inline-end: 4px;
}
.v-progress-linear {
flex: 1;
width: unset;
max-width: 100px;
inline-size: unset;
max-inline-size: 100px;
border-radius: 4px;
}
}
.v-list-item-content {
padding-top: 4px;
padding-bottom: 2px;
padding-block: 4px 2px;
}
.v-list-item:not(:first-child) {
.header {
padding-top: 8px;
border-top: var(--theme--border-width) solid var(--theme--border-color-subdued);
padding-block-start: 8px;
border-block-start: var(--theme--border-width) solid var(--theme--border-color-subdued);
}
}
</style>

View File

@@ -232,7 +232,7 @@ const newTranslationDefaults = computed(() => {
<style lang="scss" scoped>
.translation-input {
.selected-translation {
margin-right: auto;
margin-inline-end: auto;
padding: 2px 8px 0;
color: var(--theme--primary);
background-color: var(--theme--primary-background);
@@ -260,7 +260,7 @@ const newTranslationDefaults = computed(() => {
}
.search {
padding: 12px 8px 6px 8px;
padding: 12px 8px 6px;
.search-input {
--input-height: 40px;
@@ -286,9 +286,7 @@ const newTranslationDefaults = computed(() => {
}
:deep(mark) {
flex-basis: auto;
flex-grow: 0;
flex-shrink: 1;
flex: 0 1 auto;
color: var(--theme--primary);
}

View File

@@ -201,6 +201,6 @@ function cancelAndClose() {
}
.v-error {
margin-top: 24px;
margin-block-start: 24px;
}
</style>

View File

@@ -294,11 +294,11 @@ function remove(id: string) {
.drawer-content {
padding: var(--content-padding);
padding-bottom: var(--content-padding-bottom);
padding-block-end: var(--content-padding-bottom);
}
.list {
margin-bottom: 8px;
margin-block-end: 8px;
padding: 0;
}
</style>

View File

@@ -28,6 +28,6 @@ const { t } = useI18n();
}
.v-button:not(:last-child) {
margin-right: 8px;
margin-inline-end: 8px;
}
</style>

View File

@@ -23,7 +23,7 @@ const { t } = useI18n();
}
.v-notice {
margin-bottom: 24px;
margin-block-end: 24px;
}
.app-minimal-preview {

View File

@@ -164,7 +164,7 @@ function useExpandCollapseAll() {
<style lang="scss" scoped>
.v-notice {
margin-bottom: 36px;
margin-block-end: 36px;
}
.label-wrapper {
@@ -174,7 +174,7 @@ function useExpandCollapseAll() {
}
.type-label {
margin-bottom: 8px;
margin-block-end: 8px;
}
.expand-collapse-action {

View File

@@ -66,6 +66,6 @@ const fields = computed<DeepPartial<Field>[]>(() => [
<style scoped>
.v-notice {
margin-bottom: 36px;
margin-block-end: 36px;
}
</style>

View File

@@ -82,6 +82,6 @@ const fieldWarnings = computed(() => {
<style lang="scss" scoped>
.v-notice {
margin-bottom: 36px;
margin-block-end: 36px;
}
</style>

View File

@@ -41,8 +41,8 @@ const internalCurrentTab = computed({
}
.dot {
width: 12px;
height: 12px;
inline-size: 12px;
block-size: 12px;
background-color: var(--theme--foreground-subdued);
border-radius: 50%;

View File

@@ -68,6 +68,6 @@ const fields = computed<DeepPartial<Field>[]>(() => [
<style scoped>
.v-notice {
margin-bottom: 36px;
margin-block-end: 36px;
}
</style>

View File

@@ -234,7 +234,6 @@ function save() {
<style lang="scss" scoped>
.content {
padding: var(--content-padding);
padding-top: 0;
padding-bottom: var(--content-padding);
padding-block: 0 var(--content-padding);
}
</style>

View File

@@ -20,9 +20,9 @@ const { t } = useI18n();
padding: 12px;
font-weight: 600;
background-color: var(--theme--form--field--input--background);
border-top-left-radius: var(--theme--border-radius);
border-top-right-radius: var(--theme--border-radius);
border-bottom: var(--theme--border-width) solid var(--theme--border-color-subdued);
border-start-start-radius: var(--theme--border-radius);
border-start-end-radius: var(--theme--border-radius);
border-block-end: var(--theme--border-width) solid var(--theme--border-color-subdued);
}
}
</style>

Some files were not shown because too many files have changed in this diff Show More