Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
87c4553
Draft an alert component
JayGeorge Jan 19, 2026
3be6edd
Fix icons
JayGeorge Jan 19, 2026
0cfb821
Alert - improve markup
JayGeorge Jan 19, 2026
ef27349
Alert - tweak alignment
JayGeorge Jan 19, 2026
d9952d8
Alert - message styling
JayGeorge Jan 19, 2026
136176a
Alert - Style code snippets
JayGeorge Jan 19, 2026
e571449
Alert / Style code snippets - remove unnecessary borders
JayGeorge Jan 19, 2026
2fafc24
Alert / Style code snippets - fix dark mode legibility
JayGeorge Jan 19, 2026
7b36101
Alert / Style code snippets - improve
JayGeorge Jan 19, 2026
6987890
Dashboard demo
JayGeorge Jan 19, 2026
573a8e8
Merge branch 'master' into alert-component
JayGeorge Jan 19, 2026
8f69599
Move the demo to the playground
JayGeorge Jan 19, 2026
46e755b
Improve realism of demo messages
JayGeorge Jan 19, 2026
0f8e853
Add alert component to the test's expected exports list
JayGeorge Jan 19, 2026
312826d
Add Alert to the package export file
JayGeorge Jan 19, 2026
fa29d92
Alert - make code size smaller
JayGeorge Jan 19, 2026
f5e79e3
Alert - add storybook component
JayGeorge Jan 20, 2026
02739de
Add some rich content examples
JayGeorge Jan 20, 2026
97c436c
Fix icon
JayGeorge Jan 20, 2026
9d8b22e
Add docs
JayGeorge Jan 20, 2026
6230291
Add instruction
JayGeorge Jan 20, 2026
84be7e9
Simplify the Alert component to use Vue's slot fallback syntax
JayGeorge Jan 20, 2026
9c8b80b
Alerts should work with the Heading and Description components
JayGeorge Jan 21, 2026
dd46b21
Add some demos
JayGeorge Jan 21, 2026
37f1143
Tweak variations
JayGeorge Jan 21, 2026
684c786
Merge branch 'master' into alert-component
JayGeorge Jan 21, 2026
5f2ddb3
Finish documenting using Alerts with Heading/Description components
JayGeorge Jan 21, 2026
127ffdc
heading prop and use heading/description components
jasonvarga Jan 21, 2026
15544e7
Fix color inconsistencies
JayGeorge Jan 22, 2026
52a474b
Fix color inconsistencies
JayGeorge Jan 22, 2026
c4dc1ae
Fix dark icon colors
JayGeorge Jan 22, 2026
f4cb913
Dark mode fix
JayGeorge Jan 22, 2026
cc09401
Fix inconsistency
JayGeorge Jan 22, 2026
79c83d8
Merge branch 'master' into max-width-control
JayGeorge Jan 22, 2026
6b6d16d
Try a new max-width
JayGeorge Jan 22, 2026
5a4aff5
Replace all max-width-5xl with new max-width-page
JayGeorge Jan 22, 2026
2fe6c1d
Max width toggle prototype
JayGeorge Jan 22, 2026
ce3595e
Make the icons match more
JayGeorge Jan 22, 2026
aa269b1
Hide the toggle width button for smaller screens; it's just noise and…
JayGeorge Jan 22, 2026
9fae14f
Add a tooltip instead of a title
JayGeorge Jan 22, 2026
1b0de16
Change phrasing
JayGeorge Jan 22, 2026
ad921d2
Improve phrasing
JayGeorge Jan 22, 2026
6efac37
Improve phrasing
JayGeorge Jan 22, 2026
cd27d05
Merge branch 'master' into max-width-control
JayGeorge Jan 22, 2026
563a147
Fix /cp/collections not responding to the layout toggle control
JayGeorge Jan 22, 2026
388b0d3
Make the layout-width button pulse when it appears
jackmcdade Jan 22, 2026
d5d96e4
Reduce max-width-page slightly
JayGeorge Jan 23, 2026
8e3f94d
Use a different approach - wip
JayGeorge Jan 23, 2026
8cf5a1e
Revert "Use a different approach - wip"
JayGeorge Jan 23, 2026
b26c35f
Get this bad boy working
JayGeorge Jan 23, 2026
03696cc
Add max-w-5xl (maybe?) around lots of things
JayGeorge Jan 23, 2026
601e651
Switch to a data-attribute to better separate tailwind classes with c…
JayGeorge Jan 23, 2026
618c242
Try a max width of 6xl for narrower pages
JayGeorge Jan 23, 2026
3aa30c0
Tidy - Add a few comments
JayGeorge Jan 23, 2026
edd18d3
irrelevant
jasonvarga Jan 23, 2026
1f2f79f
Tweak layout expand icon animation slightly
JayGeorge Jan 24, 2026
12abadf
Tweak layout expand icon animation slightly
JayGeorge Jan 24, 2026
dc7eaf1
Dynamic max width… Only switch to max-w-6xl on larger screens. On sma…
JayGeorge Jan 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion resources/css/components/fieldtypes/bard.css
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@
@apply fixed inset-0 min-h-screen overflow-scroll border-none rounded-none bg-gray-100 pt-14 dark:bg-gray-850;

& > .bard-editor {
@apply relative mx-auto my-6 max-w-5xl rounded-lg bg-white px-8 shadow-ui-md dark:bg-gray-925 dark:shadow-lg;
@apply relative mx-auto my-6 max-w-page rounded-lg bg-white px-8 shadow-ui-md dark:bg-gray-925 dark:shadow-lg;
}
.bard-content {
@apply dark:bg-gray-925;
Expand Down
4 changes: 2 additions & 2 deletions resources/css/components/fieldtypes/markdown.css
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@
}

.editor {
@apply relative mx-auto my-6 max-w-5xl rounded-lg bg-white dark:bg-gray-900! px-2 shadow-ui-md md:px-8 md:pt-8;
@apply relative mx-auto my-6 max-w-page rounded-lg bg-white dark:bg-gray-900! px-2 shadow-ui-md md:px-8 md:pt-8;

.CodeMirror-scroll {
@apply m-0;
Expand All @@ -126,6 +126,6 @@
}

.markdown-preview {
@apply relative mx-auto max-w-5xl bg-transparent p-8 text-lg;
@apply relative mx-auto max-w-page bg-transparent p-8 text-lg;
}
}
16 changes: 16 additions & 0 deletions resources/css/core/utilities.css
Original file line number Diff line number Diff line change
Expand Up @@ -359,3 +359,19 @@
@utility shape-squircle {
corner-shape: squircle;
}

/* UTILITIES / ANIMATIONS
=================================================== */
@keyframes pulse-on-appearance {
50% {
opacity: 0.85;
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}

@utility animate-pulse-on-appearance {
animation: pulse-on-appearance 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
5 changes: 5 additions & 0 deletions resources/css/ui.css
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,9 @@
}

@theme {
/* This is the outer width of the page content area. */
--max-width-page: 85rem;

--text-4xs: 0.4rem;
--text-3xs: 0.5rem;
--text-2xs: 0.7rem;
Expand All @@ -166,6 +169,8 @@
--breakpoint-xs: 30rem;
--breakpoint-2xs: 20rem;
--breakpoint-3xs: 15rem;
/* 1920px */
--breakpoint-3xl: 120rem;

--shadow-ui-xs: 0px 1px 3px -1px rgba(0,0,0,0.10);
--shadow-ui-sm: 0px 2px 3px -2px rgba(0,0,0,0.15);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
:title="__('Add Set')"
v-model:open="isOpen"
v-else-if="shouldUseModal"
class="xl:max-w-3xl 2xl:max-w-5xl"
class="xl:max-w-3xl 2xl:max-w-page"
>
<template #trigger>
<slot name="trigger" />
Expand Down
14 changes: 14 additions & 0 deletions resources/js/components/global-header/Header.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
<script setup>
import { inject } from 'vue';
import { Icon } from '@ui';
import Logo from './Logo.vue';
import Breadcrumbs from './Breadcrumbs.vue';
import SiteSelector from './SiteSelector.vue';
import Search from './Search.vue';
import ViewSiteButton from './ViewSiteButton.vue';
import UserDropdown from './UserDropdown.vue';

const layout = inject('layout', {});
const isMaxWidthEnabled = layout.isMaxWidthEnabled;
const toggleMaxWidth = layout.toggleMaxWidth;
</script>

<template>
Expand All @@ -27,6 +33,14 @@ import UserDropdown from './UserDropdown.vue';
<div class="flex items-center">
<Search />
</div>
<button
@click="toggleMaxWidth"
:aria-label="isMaxWidthEnabled ? __('Expand Layout') : __('Constrain Layout')"
v-tooltip="isMaxWidthEnabled ? __('Expand Layout') : __('Constrain Layout')"
class="hidden [@media(min-width:1800px)]:inline-flex items-center justify-center whitespace-nowrap shrink-0 font-medium antialiased cursor-pointer no-underline disabled:text-white/60 dark:disabled:text-white/50 disabled:cursor-not-allowed [&_svg]:shrink-0 [&_svg]:text-gray-925 [&_svg]:opacity-60 dark:[&_svg]:text-white bg-transparent hover:bg-gray-400/10 text-gray-900 dark:text-gray-300 dark:hover:bg-white/15 dark:hover:text-gray-200 h-8 text-[0.8125rem] leading-tight rounded-lg px-0 gap-0 w-8 [&_svg]:size-4 -me-2 [&_svg]:text-white/85! will-change-transform"
>
<Icon :name="isMaxWidthEnabled ? 'zoom-fit-screen' : 'fit-screen'" class="animate-pulse-on-appearance" />
</button>
<ViewSiteButton />
<UserDropdown />
</div>
Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/roles/PublishForm.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<div class="max-w-5xl mx-auto">
<div class="max-w-page mx-auto">
<Header :title="__(initialTitle) || __('Create Role')" icon="permissions">
<CommandPaletteItem
:category="$commandPalette.category.Actions"
Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/updater/Updater.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<div class="max-w-5xl mx-auto">
<div class="max-w-page mx-auto">
<ui-header :title="__('Updates')" icon="updates">
<template v-if="!gettingChangelog" #actions>
<ui-badge :prepend="__('Statamic Version')" :text="currentVersion" color="green" size="lg" />
Expand Down
2 changes: 1 addition & 1 deletion resources/js/components/user-groups/PublishForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ function save() {
</script>

<template>
<div class="max-w-5xl mx-auto">
<div class="max-w-page mx-auto">
<Header :title="__(title)" icon="groups">
<Dropdown v-if="canEditBlueprint" class="me-2">
<template #trigger>
Expand Down
22 changes: 22 additions & 0 deletions resources/js/composables/use-max-width-toggle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ref, watch } from 'vue';

const STORAGE_KEY = 'statamic.max-width-enabled';
const isMaxWidthEnabled = ref(
localStorage.getItem(STORAGE_KEY) !== 'false' // Default to true
);

// Sync with localStorage
watch(isMaxWidthEnabled, (value) => {
localStorage.setItem(STORAGE_KEY, value.toString());
});

export default function useMaxWidthToggle() {
const toggle = () => {
isMaxWidthEnabled.value = !isMaxWidthEnabled.value;
};

return {
isMaxWidthEnabled,
toggle,
};
}
2 changes: 1 addition & 1 deletion resources/js/pages/PublishForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const props = defineProps({
<template>
<Head :title />

<div :class="{ 'max-w-5xl mx-auto': asConfig }">
<div :class="{ 'max-w-page mx-auto': asConfig }">
<PublishForm
:icon
:title
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/addons/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ onMounted(() => {
<template>
<Head :title="__('Addons')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-5xl 3xl:max-w-6xl mx-auto" data-max-width-wrapper>
<Header :title="__('Addons')" icon="addons">
<CommandPaletteItem
category="Actions"
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/blueprints/Edit.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ defineProps({
<template>
<Head :title="__('Edit Blueprint')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-5xl 3xl:max-w-5xl 3xl:max-w-6xl mx-auto" data-max-width-wrapper>
<blueprint-builder
:show-title="showTitle"
:action="action"
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/blueprints/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const resetters = ref({});
<template>
<Head :title="__('Blueprints')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-5xl 3xl:max-w-6xl mx-auto" data-max-width-wrapper>
<Header :title="__('Blueprints')" icon="blueprints">
<Dropdown align="end">
<template #trigger>
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/blueprints/ScopedIndex.vue
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ const reloadPage = () => router.reload();
<template>
<Head :title="__('Blueprints')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-page mx-auto">
<Header :title="__('Blueprints')" icon="blueprints">
<Button v-if="reorderable" :disabled="!hasBeenReordered" @click="saveOrder">
{{ __('Save Order') }}
Expand Down
52 changes: 25 additions & 27 deletions resources/js/pages/collections/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,32 @@ if (props.collections.length === 0) useArchitecturalBackground();
<template>
<Head :title="__('Collections')" />

<div class="max-w-5xl mx-auto">
<Listing
v-if="collections.length"
:initial-rows="collections"
:initial-columns="columns"
:can-create-collections="canCreate"
:create-url="createUrl"
:action-url="actionUrl"
/>
<Listing
v-if="collections.length"
:initial-rows="collections"
:initial-columns="columns"
:can-create-collections="canCreate"
:create-url="createUrl"
:action-url="actionUrl"
/>

<template v-else>
<header class="py-8 pt-16 text-center">
<h1 class="text-[25px] font-medium antialiased flex justify-center items-center gap-2 sm:gap-3">
<Icon name="collections" class="size-5 text-gray-500" />
{{ __('Collections') }}
</h1>
</header>
<template v-else>
<header class="py-8 pt-16 text-center">
<h1 class="text-[25px] font-medium antialiased flex justify-center items-center gap-2 sm:gap-3">
<Icon name="collections" class="size-5 text-gray-500" />
{{ __('Collections') }}
</h1>
</header>

<EmptyStateMenu :heading="__('statamic::messages.collection_configure_intro')">
<EmptyStateItem
:href="createUrl"
icon="collections"
:heading="__('Create Collection')"
:description="__('Get started by creating your first collection.')"
/>
</EmptyStateMenu>
</template>
<EmptyStateMenu :heading="__('statamic::messages.collection_configure_intro')">
<EmptyStateItem
:href="createUrl"
icon="collections"
:heading="__('Create Collection')"
:description="__('Get started by creating your first collection.')"
/>
</EmptyStateMenu>
</template>

<DocsCallout :topic="__('Collections')" url="collections" />
</div>
<DocsCallout :topic="__('Collections')" url="collections" />
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Max-width toggle ineffective for pages with own wrappers

Medium Severity

The layout max-width toggle in Layout.vue conditionally applies max-w-page based on isMaxWidthEnabled. However, most pages (like addons/Index.vue, blueprints/Edit.vue, forms/Index.vue, etc.) still have their own <div class="max-w-page mx-auto"> wrappers. When the toggle is off (expanded layout), these inner wrappers still constrain the content to 90rem, making the toggle ineffective. Only collections/Index.vue had its wrapper removed, so only that page actually responds to the toggle. Users clicking the toggle button will see no change on most pages.

Additional Locations (2)

Fix in Cursor Fix in Web

</template>
2 changes: 1 addition & 1 deletion resources/js/pages/fieldsets/Edit.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<div class="max-w-5xl mx-auto">
<div class="max-w-5xl 3xl:max-w-6xl mx-auto" data-max-width-wrapper>
<Head :title="__('Edit Fieldset')" />

<Header :title="__('Edit Fieldset')" icon="fieldsets">
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/fieldsets/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const reloadPage = () => router.reload();
<template>
<Head :title="__('Fieldsets')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-5xl 3xl:max-w-6xl mx-auto" data-max-width-wrapper>
<Header :title="__('Fieldsets')" icon="fieldsets">
<CommandPaletteItem
category="Actions"
Expand Down
2 changes: 1 addition & 1 deletion resources/js/pages/forms/Index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const reloadPage = () => router.reload();
<template>
<Head :title="__('Forms')" />

<div class="max-w-5xl mx-auto">
<div class="max-w-page mx-auto">
<template v-if="isEmpty">
<header class="py-8 pt-16 text-center">
<h1 class="text-[25px] font-medium antialiased flex justify-center items-center gap-2 sm:gap-3">
Expand Down
Loading