Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
5f93d3a
Bump version to 1.24.0 with WordPress 6.9 compatibility and dark mode…
chubes4 Dec 13, 2025
fa61269
Bump version to 1.25.0 with documentation, mentions autocompleter, an…
chubes4 Dec 15, 2025
4e7a399
one more sass import fixed
chubes4 Dec 15, 2025
f16f5c8
Bump version to 1.25.1 with bbPress reply threading, bug fixes, and t…
chubes4 Dec 20, 2025
d976139
Bump version to 1.25.2 with SASS import fixes and TypeScript improvem…
chubes4 Dec 20, 2025
8ce2486
Fix ESLint errors and improve code quality
chubes4 Dec 20, 2025
94bf260
Bump version to 1.25.3 with ESLint improvements and TypeScript type s…
chubes4 Dec 21, 2025
f4a9230
Agents.md -> Claude.md
chubes4 Jan 19, 2026
944ba6c
Fix toolbar button and list block styling in dark mode
chubes4 Jan 27, 2026
c38524d
release: v1.25.4
chubes4 Jan 27, 2026
5a74c08
Add ThemeSupportsDispatcher for responsive embed classes
chubes4 Jan 27, 2026
c8370b4
release: v1.25.5
chubes4 Jan 27, 2026
bb28e37
Fix editor build and homeboy packaging for WordPress 6.9
chubes4 Mar 12, 2026
026435a
Treat empty block markup as restorable bbPress draft content
chubes4 Mar 12, 2026
0e25fe6
Use configured bbPress draft and media endpoints
chubes4 Mar 12, 2026
eea9671
Inject community endpoints into editor integrations
chubes4 Mar 12, 2026
375a0e2
feat: add generic Frontend handler for non-bbPress editor contexts
chubes4 Mar 23, 2026
c3ba93b
refactor: extract brand-specific styles to consumer layer
chubes4 Mar 24, 2026
d0c6187
refactor: replace handler subclasses with data-driven context engine …
chubes4 Mar 24, 2026
c24de8f
update plugin description for 2.0.0 — universal block editor
chubes4 Mar 24, 2026
3bef138
release: v1.26.0
chubes4 Mar 24, 2026
14a0bc2
BREAKING CHANGE: bump to 2.0.0 — handler subclasses removed
chubes4 Mar 24, 2026
7d32743
fix: correct changelog to reflect 2.0.0 (not 1.26.0)
chubes4 Mar 24, 2026
2c409a1
fix: defer asset registration to init hook
chubes4 Mar 24, 2026
374e5cb
fix: use wp_loaded for asset registration instead of init
chubes4 Mar 24, 2026
a5eea3c
release: v2.0.1 — fix asset registration timing
chubes4 Mar 24, 2026
9c79b58
docs: add 2.0.1 changelog entry
chubes4 Mar 24, 2026
98788c5
expose per-textarea content API via ContentBridge component
chubes4 Mar 24, 2026
884632d
release: v2.0.2
chubes4 Mar 24, 2026
a86bbed
use ContentBridge API for reply draft context switching
chubes4 Mar 24, 2026
c1f2b52
release: v2.0.3
chubes4 Mar 24, 2026
7ee3ae4
chore: add package-lock.json (IBE v3.2.0 update)
chubes4 Mar 27, 2026
00a2f1f
Fire enqueue_block_assets alongside enqueue_block_editor_assets for G…
chubes4 Mar 28, 2026
da7b8df
release: v2.0.4
chubes4 Apr 2, 2026
206366b
fix: repoint @chubes4/isolated-block-editor to canonical workspace ch…
chubes4 Apr 26, 2026
991a65c
release: v2.0.5
chubes4 Apr 26, 2026
b3b7bb5
fix: merge into theme.json data instead of replacing it
chubes4 Apr 26, 2026
e8ce60b
release: v2.0.6
chubes4 Apr 26, 2026
10d6b3d
feat: add slot-fill API for rendering host content into IBE footer/to…
chubes4 Apr 26, 2026
5732597
fix: update isolated block editor dependency
chubes4 May 24, 2026
1aa9929
release: v2.1.0
chubes4 May 24, 2026
a1c6afc
chore: bump bundled isolated-block-editor to v3.3.3
chubes4 May 24, 2026
f8be7f2
release: v2.1.1
chubes4 May 24, 2026
e27f830
fix: theme block preview popover icons + text for dark mode (#3)
chubes4 May 24, 2026
81c0f99
release: v2.1.2
chubes4 May 24, 2026
9125d8d
fix: theme detached inserter icons + preview content for dark mode (#4)
chubes4 May 24, 2026
cdecc21
release: v2.1.3
chubes4 May 24, 2026
9291988
fix: drop padding on block-card inside preview popover (#5)
chubes4 May 24, 2026
373503f
release: v2.1.4
chubes4 May 24, 2026
14fe0b4
feat: replace IBE with embedded Gutenberg shell (#6)
chubes4 May 24, 2026
edd0064
chore: refresh yarn.lock after IBE removal
chubes4 May 24, 2026
8c40ac6
release: v2.2.0
chubes4 May 24, 2026
8243db9
refactor: remove vendor-specific mentions completer (layer purity) (#7)
chubes4 May 24, 2026
4ac3fe6
fix: seed default paragraph and remove inline BlockInspector (#8)
chubes4 May 24, 2026
3630da6
release: v2.2.1
chubes4 May 24, 2026
4dbb472
feat: opt-in postEntity wiring for canonical-post BE consumers (close…
chubes4 May 25, 2026
9b3fc56
fix: restore IBE-removal regression handling for embedded editor (#12)
chubes4 May 25, 2026
db922e2
release: v2.3.0
chubes4 May 25, 2026
b2751cc
feat: restore detached sidebar from IBE removal (closes #13) (#15)
chubes4 May 25, 2026
691c2fe
fix: suppress toolbar inserter when persistent detached sidebar is ac…
chubes4 May 25, 2026
4ca584e
fix: thread host theme tokens into editor iframe via styles[] (closes…
chubes4 May 25, 2026
0d8e52f
release: v2.4.0
chubes4 May 25, 2026
88e57fb
feat!: clean-cut migration off IBE-shaped names and dead-DOM CSS sele…
chubes4 May 25, 2026
421353d
fix: drop hardcoded canvas iframe min-height defaults (#19)
chubes4 May 25, 2026
5c89d27
release: v3.0.0
chubes4 May 25, 2026
060d182
fix: single-row toolbar layout + per-file CSS cache-busting (#20)
chubes4 May 25, 2026
f5646ea
release: v3.0.1
chubes4 May 25, 2026
5694ed9
feat: configurable toolbar API with upstream-matching defaults (#22)
chubes4 May 25, 2026
fbaccba
fix: pass height="100%" to BlockCanvas and flex the editor shell so t…
chubes4 May 25, 2026
026a779
release: v3.1.0
chubes4 May 25, 2026
1e668ef
feat: restore sensible 400px min-height default on editor wrapper (#24)
chubes4 May 25, 2026
98cdb0e
release: v3.2.0
chubes4 May 25, 2026
7e84caf
fix: add 400px min-height to canvas iframe (consumer-overridable) (#25)
chubes4 May 25, 2026
aa42252
release: v3.2.1
chubes4 May 25, 2026
1712e5c
fix: prevent BlockToolbar from claiming full toolbar row (#26)
chubes4 May 25, 2026
39bb905
release: v3.2.2
chubes4 May 25, 2026
6bad8f9
fix: wrap document tools in <Toolbar> for 48px toolbar contract (#27)
chubes4 May 26, 2026
4a9c010
release: v3.2.3
chubes4 May 26, 2026
43166ac
refactor: extract <EmbeddedEditorShell> for toolbar + canvas composit…
chubes4 May 26, 2026
af51fdd
release: v3.2.4
chubes4 May 26, 2026
af44e22
fix: add horizontal/vertical padding to toolbar wrapper (#30)
chubes4 May 26, 2026
06631ac
release: v3.2.5
chubes4 May 26, 2026
d67e759
refactor: remove dead wp-interface-shim.ts (#33)
chubes4 May 26, 2026
ecda152
chore: remove fork-local upstream artifacts (#41)
chubes4 May 26, 2026
f52c7f5
fix: make attachment reparenting opt-in (#43)
chubes4 May 26, 2026
d2120d8
fix: gate bbPress media uploads (#45)
chubes4 May 26, 2026
ab32dcb
docs: neutralize host wording (#40)
chubes4 May 26, 2026
2587b11
chore: align upstream plugin metadata (#42)
chubes4 May 26, 2026
3bf9896
refactor: neutralize runtime API names (#44)
chubes4 May 26, 2026
71cbe38
chore: drop dead IframeThemeFixes + audit token map (closes #31 items…
chubes4 May 27, 2026
9d9a071
fix: restore fork-local files needed for Extra-Chill deploy pipeline …
chubes4 May 27, 2026
3e66d95
docs: add portable editor adapter migration guide (#65)
chubes4 May 30, 2026
85d8c12
feat: add portable server context bootstrap (#67)
chubes4 May 30, 2026
5f7a2ef
feat: add portable editor mount API (#62)
chubes4 May 30, 2026
edf4b5d
feat: add portable content bridge (#64)
chubes4 May 30, 2026
93ea969
feat: add portable editor lifecycle events (#66)
chubes4 May 30, 2026
ac033fc
feat: expand portable editor chrome slots (#63)
chubes4 May 30, 2026
4a7a25c
docs: coordinate portable adapter contract (#68)
chubes4 May 30, 2026
4869f56
feat: add portable host adapter hooks (#69)
chubes4 May 30, 2026
1867c53
feat: add portable editor mode settings (#70)
chubes4 May 30, 2026
d1820f5
feat: add portable editor service injection (#71)
chubes4 May 30, 2026
6b13dd2
feat: add portable editor data context (#72)
chubes4 May 30, 2026
d3d8ecd
feat: add portable host entity bridge (#73)
chubes4 May 30, 2026
77bcda4
fix portable editor contract semantics (#74)
chubes4 May 30, 2026
d16704f
fix: harden portable editor public lifecycle payloads (#75)
chubes4 May 30, 2026
5997e10
refactor: extract bbPress editor adapter (#76)
chubes4 May 30, 2026
6bbcd42
fix: scope portable editor REST bootstrap (#78)
chubes4 May 31, 2026
6a977cb
refactor: share editor service types (#85)
chubes4 May 31, 2026
b6e7c8f
docs: refresh component architecture guide (#86)
chubes4 May 31, 2026
83cd7b1
fix: support multiple editor bootstrap settings (#87)
chubes4 May 31, 2026
ecd3401
fix: isolate media upload filter installation (#88)
chubes4 May 31, 2026
e6aa31b
fix: keep allowed blocks scoped to editor instances (#89)
chubes4 May 31, 2026
e3be8f2
fix: clarify global bootstrap settings boundaries (#90)
chubes4 May 31, 2026
a0fc6a9
feat: add initial content transform pipeline (#91)
chubes4 May 31, 2026
7822bbc
Merge remote-tracking branch 'origin/trunk' into update-from-extra-ch…
chubes4 May 31, 2026
60eaec2
docs: trim trailing whitespace
chubes4 May 31, 2026
dc51050
docs: refresh architecture documentation
chubes4 May 31, 2026
a2587f3
feat: expose frontend pattern settings
chubes4 May 31, 2026
968c818
fix: tighten pattern settings API
chubes4 May 31, 2026
968cf50
fix: use available paragraph direction icon
chubes4 May 31, 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
54 changes: 54 additions & 0 deletions .buildignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Development files
.git
.gitignore
.gitattributes
.vscode
.idea
*.swp
*.swo
*~

# Documentation
README.md
AGENTS.md
CLAUDE.md
LICENSE.md
docs

# Development dependencies
node_modules
vendor
composer.lock
package-lock.json
yarn.lock

# Source files (compiled assets are in build/)
src

# Build artifacts to exclude
*.zip
*.tar.gz
.DS_Store
._*
*.log
*.tmp
*.temp
.env*

# Build/dev config files
build.sh
.buildignore
.eslintrc.js
.prettierrc.js
tsconfig.json
types.d.ts
webpack.config.js
phpcs.xml
phpunit.xml
psalm.xml

# Tests
tests

# WordPress.org assets (not needed in plugin)
resources
185 changes: 82 additions & 103 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,31 @@
/**
* External dependencies
*/
const { escapeRegExp
} = require( 'lodash' );

/**
* Internal dependencies
*/
const { version
} = require( './package' );
const { version } = require( './package' );

/**
* Regular expression string matching a SemVer string with equal major/minor to
* the current package version. Used in identifying deprecations.
*
* @type {string}
*/
const majorMinorRegExp = escapeRegExp( version.replace( /\.\d+$/, '' ) ) + '(\\.\\d+)?';
const majorMinorRegExp = version.replace( /\.\d+$/, '' ).replace( /[.*+?^${}()|[\]\\]/g, '\\$&' ) + '(\\.\\d+)?';

module.exports = {
root: true,
extends: [
'plugin:@wordpress/eslint-plugin/recommended',
'plugin:eslint-comments/recommended',
],
plugins: [
'import',
],
extends: [ 'plugin:@wordpress/eslint-plugin/recommended', 'plugin:eslint-comments/recommended' ],
plugins: [ 'import' ],
globals: {
wp: 'off',
wp: 'readonly',
wpBlocksEverywhere: 'readonly',
jQuery: 'readonly',
MutationObserver: 'readonly',
DOMParser: 'readonly',
AbortController: 'readonly',
FormData: 'readonly',
},
env: {
browser: true,
},
rules: {
'@wordpress/dependency-group': 'error',
Expand All @@ -39,147 +36,129 @@ module.exports = {
// we'll get a `SyntaxError` (Invalid regular expression: \ at end of pattern)
// here. That's why we use \\u002F in the regexes below.
{
selector: 'ImportDeclaration[source.value=/^@wordpress\\u002F.+\\u002F/
]',
selector: 'ImportDeclaration[source.value=/^@wordpress\\u002F.+\\u002F/]',
message: 'Path access on WordPress dependencies is not allowed.',
},
{
selector: 'ImportDeclaration[source.value=/^react-spring(?!\\u002Fweb\.cjs)/
]',
selector: 'ImportDeclaration[source.value=/^react-spring(?!\\u002Fweb.cjs)/]',
message: 'The react-spring dependency must specify CommonJS bundle: react-spring/web.cjs',
},
{
selector: 'CallExpression[callee.name="deprecated"
] Property[key.name="version"
][value.value=/' + majorMinorRegExp + '/
]',
selector:
'CallExpression[callee.name="deprecated"] Property[key.name="version"][value.value=/' +
majorMinorRegExp +
'/]',
message: 'Deprecated functions must be removed before releasing this version.',
},
{
selector: 'CallExpression[callee.name=/^(__|_n|_nx|_x)$/
]:not([arguments.0.type=/^Literal|BinaryExpression$/
])',
selector:
'CallExpression[callee.name=/^(__|_n|_nx|_x)$/]:not([arguments.0.type=/^Literal|BinaryExpression$/])',
message: 'Translate function arguments must be string literals.',
},
{
selector: 'CallExpression[callee.name=/^(_n|_nx|_x)$/
]:not([arguments.1.type=/^Literal|BinaryExpression$/
])',
selector:
'CallExpression[callee.name=/^(_n|_nx|_x)$/]:not([arguments.1.type=/^Literal|BinaryExpression$/])',
message: 'Translate function arguments must be string literals.',
},
{
selector: 'CallExpression[callee.name=_nx
]:not([arguments.3.type=/^Literal|BinaryExpression$/
])',
selector: 'CallExpression[callee.name=_nx]:not([arguments.3.type=/^Literal|BinaryExpression$/])',
message: 'Translate function arguments must be string literals.',
},
{
selector: 'CallExpression[callee.name=/^(__|_x|_n|_nx)$/
] Literal[value=/\\.{
3
}/
]',
selector: 'CallExpression[callee.name=/^(__|_x|_n|_nx)$/] Literal[value=/\\.{3}/]',
message: 'Use ellipsis character (…) in place of three dots',
},
{
selector: 'ImportDeclaration[source.value="redux"
] Identifier.imported[name="combineReducers"
]',
selector: 'ImportDeclaration[source.value="redux"] Identifier.imported[name="combineReducers"]',
message: 'Use `combineReducers` from `@wordpress/data`',
},
{
selector: 'ImportDeclaration[source.value="lodash"
] Identifier.imported[name="memoize"
]',
message: 'Use memize instead of Lodash’s memoize',
selector: 'ImportDeclaration[source.value="lodash"] Identifier.imported[name="memoize"]',
message: "Use memize instead of Lodash's memoize",
},
{
selector: 'CallExpression[callee.object.name="page"
][callee.property.name="waitFor"
]',
selector: 'CallExpression[callee.object.name="page"][callee.property.name="waitFor"]',
message: 'Prefer page.waitForSelector instead.',
},
{
selector: 'JSXAttribute[name.name="id"
][value.type="Literal"
]',
selector: 'JSXAttribute[name.name="id"][value.type="Literal"]',
message: 'Do not use string literals for IDs; use withInstanceId instead.',
},
{
// Discourage the usage of `Math.random()` as it's a code smell
// for UUID generation, for which we already have a higher-order
// component: `withInstanceId`.
selector: 'CallExpression[callee.object.name="Math"
][callee.property.name="random"
]',
message: 'Do not use Math.random() to generate unique IDs; use withInstanceId instead. (If you’re not generating unique IDs: ignore this message.)',
selector: 'CallExpression[callee.object.name="Math"][callee.property.name="random"]',
message:
'Do not use Math.random() to generate unique IDs; use withInstanceId instead. (If you’re not generating unique IDs: ignore this message.)',
},
{
selector: 'CallExpression[callee.name="withDispatch"
] > :function > BlockStatement > :not(VariableDeclaration,ReturnStatement)',
message: 'withDispatch must return an object with consistent keys. Avoid performing logic in `mapDispatchToProps`.',
selector:
'CallExpression[callee.name="withDispatch"] > :function > BlockStatement > :not(VariableDeclaration,ReturnStatement)',
message:
'withDispatch must return an object with consistent keys. Avoid performing logic in `mapDispatchToProps`.',
},
{
selector: 'LogicalExpression[operator="&&"
][left.property.name="length"
][right.type="JSXElement"
]',
selector: 'LogicalExpression[operator="&&"][left.property.name="length"][right.type="JSXElement"]',
message: 'Avoid truthy checks on length property rendering, as zero length is rendered verbatim.',
},
],
'react/forbid-elements': [ 'error',
'react/forbid-elements': [
'error',
{
forbid: [
[ 'circle', 'Circle'
],
[ 'g', 'G'
],
[ 'path', 'Path'
],
[ 'polygon', 'Polygon'
],
[ 'rect', 'Rect'
],
[ 'svg', 'SVG'
],
].map( ( [ element, componentName
] ) => {
return {
element,
message: `use cross-platform <${ componentName
}> component instead.`,
forbid: [
[ 'circle', 'Circle' ],
[ 'g', 'G' ],
[ 'path', 'Path' ],
[ 'polygon', 'Polygon' ],
[ 'rect', 'Rect' ],
[ 'svg', 'SVG' ],
].map( ( [ element, componentName ] ) => {
return {
element,
message: `use cross-platform <${ componentName }> component instead.`,
};
} ),
}
},
],
},
ignorePatterns: [ 'types.d.ts', 'build/**', 'node_modules/**' ],
overrides: [
{
files: [ 'packages /**/*.js'
],
files: [ 'src/**/*.tsx', 'src/**/*.ts' ],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
rules: {
'import/no-extraneous-dependencies': 'error',
'import/no-extraneous-dependencies': 'off',
'@wordpress/no-unsafe-wp-apis': 'off',
'no-undef': 'off',
'no-unused-vars': 'off',
'jsdoc/require-param-type': 'off',
'jsdoc/no-undefined-types': 'off',
'@wordpress/i18n-translator-comments': 'off',
'no-shadow': 'off',
'no-duplicate-imports': 'off',
'no-nested-ternary': 'off',
},
excludedFiles: [
'** /*.@(android|ios|native).js',
'**/benchmark /**/*.js',
'**/@(__mocks__|__tests__|test) /**/*.js',
],
},
{
files: [
'packages/jest* /**/*.js',
],
extends: [
'plugin:@wordpress/eslint-plugin/test-unit',
],
files: [ 'src/**/*.js' ],
rules: {
'import/no-extraneous-dependencies': 'off',
'@wordpress/no-unsafe-wp-apis': 'off',
'no-undef': 'off',
},
},
{
files: [ 'packages/e2e-test* /**/*.js'
],
extends: [
'plugin:@wordpress/eslint-plugin/test-e2e',
],
files: [ 'webpack.config.js' ],
rules: {
'import/no-extraneous-dependencies': 'off',
},
},
],
};
Loading