Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c092ffb
Keep the element editor's sticky header below overlays
brianjhanson Sep 10, 2026
7cc8f50
Make craft-dialog's fullscreen actually fill the viewport
brianjhanson Sep 10, 2026
d2cfa5c
Let craft-button-group adopt a selection given in markup
brianjhanson Sep 10, 2026
bb70b4d
Port the asset image editor to TypeScript composables
brianjhanson Sep 10, 2026
14b61e8
Open the image editor from the asset edit screen
brianjhanson Sep 10, 2026
e266455
Add a toggle mode to craft-button
brianjhanson Sep 10, 2026
02726a0
Let a craft-dialog dismissal be refused
brianjhanson Sep 10, 2026
24aa7cd
Land zero under craft-slide-rule's cursor
brianjhanson Sep 10, 2026
5b88397
Frame the image the same whether or not cropping
brianjhanson Sep 10, 2026
cc791d0
Re-derive the cropper and focal point instead of nudging them
brianjhanson Sep 10, 2026
50cdc34
Add reset, and settle the layout before moving the image
brianjhanson Sep 10, 2026
37f26d5
Fill out the image editor's chrome and controls
brianjhanson Sep 10, 2026
1847753
Let a subtree carry its own theme
brianjhanson Sep 10, 2026
2c93eb8
Let ?editing open the image editor on load
brianjhanson Sep 10, 2026
fe12f31
Keep the editing parameter in step with the editor
brianjhanson Sep 10, 2026
606c7a4
Start the crop orientation on the image's own
brianjhanson Sep 10, 2026
343cfc3
Close the editor and land on the asset that was saved
brianjhanson Sep 10, 2026
4f9f6ea
Bind the dialog's open state as a property
brianjhanson Sep 10, 2026
1112bcb
Rebuild the slide rule on modern layout
brianjhanson Sep 11, 2026
d537e7e
Hold the straighten control to a readable width
brianjhanson Sep 11, 2026
7ec9c09
Move the image editor to fabric 7
brianjhanson Sep 11, 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
5 changes: 5 additions & 0 deletions .ai/rules/js.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,8 @@ Check VueUse before writing lifecycle-managed composables. PHP-derived TypeScrip

## Treat custom elements as native
Vue treats tags containing a hyphen as native custom elements. Let them pass through instead of registering them as Vue components.

## Bind Lit boolean properties with `.prop`, not `:attr`
Vue only strips a `false` boolean attribute for the seven names in its `isSpecialBooleanAttr` list (itemscope, allowfullscreen, formnovalidate, ismap, nomodule, novalidate, readonly). `open`, `disabled`, `active` and friends are in the wider `isBooleanAttr` list, which `patchAttr` never consults — so `:open="false"` on a custom element writes `open="false"`, and Lit's `{type: Boolean}` converter reads attribute *presence* and turns it on.

Use the property binding instead: `.opened="isOpen"` on `craft-dialog`, not `:open="isOpen"`. It also survives the element not being upgraded yet, since Lit re-applies shadowed instance properties. Regression test: `resources/js/modules/image-editor/components/dialogOpenBinding.test.ts`.
Loading