Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
da04ed0
Fix: Console error inside Elementor Connect screen [ED-23041] (#34833)
hein-obox Feb 20, 2026
3605908
feat: add Markdown rendering infrastructure for AI crawlers
matipojo Feb 21, 2026
849903d
feat: add Markdown rendering infrastructure for AI crawlers
matipojo Feb 21, 2026
eda9991
feat: add semantic Markdown overrides for 37 widgets
matipojo Feb 21, 2026
894ea30
Lint
matipojo Feb 21, 2026
7df7827
Lint
matipojo Feb 21, 2026
92504b1
Merge branch 'feat/markdown-rendering-infra' into feat/markdown-rende…
matipojo Feb 21, 2026
ad60ef4
Fix: Prevent overridable props deletion on element move + fix overrid…
MiryamOren Feb 22, 2026
c452131
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
7938ad3
Internal: Update interactions promotion logic [ED-22093] (#34827)
nami-p Feb 22, 2026
202b201
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
9bc3426
Merge remote-tracking branch 'origin/main' into feat/markdown-rendering
matipojo Feb 22, 2026
abe75d2
Merge remote-tracking branch 'fork/feat/markdown-rendering' into feat…
matipojo Feb 22, 2026
8c9b482
Internal: Change variables limit to 1000 [ED-20171] (#34835)
Ntnelbaba Feb 22, 2026
25c224d
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
b0057f6
Fix: Update disabled trigger option label [ED-22093] (#34844)
nami-p Feb 22, 2026
e8f15c9
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
1b3af8e
Fix: Core enqueue script warnings when V4 is disabled [ED-23052] (#34…
Ntnelbaba Feb 22, 2026
0c41755
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
3020041
Internal: Centralize interaction control options as single source of …
nami-p Feb 22, 2026
232231b
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
93cb4d1
Internal: Prepare components extended folder [ED-23032] (#34848)
IshayMaya Feb 22, 2026
8e4d6e3
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
bc59779
Internal: Use priority system for floating actions [ED-22673] (#34850)
mike-elementor Feb 22, 2026
f0cc966
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 22, 2026
716213a
Internal: Events implementation - Editor [Activation] [ED-22167] (#34…
max-zu Feb 23, 2026
1b89dc6
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
151dd29
Internal: Support pseudo classes per atomic widget type [ED-22925] (#…
RobiFerentz Feb 23, 2026
d5f2873
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
174b618
Internal: Prepare components extended folder [ED-23032] (#34851)
IshayMaya Feb 23, 2026
bddcc4f
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
0b3c3fd
Internal: Updated icons [ED-22695] (#34853)
marcin-el Feb 23, 2026
dc9f47b
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
97fb0da
Internal: Changes to text and flow content [ED-23059] (#34852)
Ntnelbaba Feb 23, 2026
3f17e90
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
72501c0
Fix: Clean up normalise function [ED-21588] (#34856)
Batsirai-muchareva Feb 23, 2026
170b493
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
780f219
Feature: Atomic widgets active for new sites [ED-22538] (#34820)
Ntnelbaba Feb 23, 2026
373a902
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
c61dd32
CI: Publish packages build to be concurrency 1 (#34854)
Ntnelbaba Feb 23, 2026
18bdf34
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
cbed76c
Internal: Step 5 | Pro features [ED-22743] (#34727)
hein-obox Feb 23, 2026
baca261
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 23, 2026
c3a448a
Fix: Change customEffects from optional to required type [ED-21588] (…
Batsirai-muchareva Feb 24, 2026
2d0b8a8
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
b4c6b7b
Internal: Update elementor icons [ED-22743] (#34865)
hein-obox Feb 24, 2026
e76f23c
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
fd09ae3
Internal: Update AI Icon in new onboarding flow [ED-22743] (#34864)
hein-obox Feb 24, 2026
125b7c1
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
c32ee2b
Internal: Add tests to new onboarding [ED-22746] (#34857)
louiswol94 Feb 24, 2026
79af9fc
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
1b67b98
Internal: Disable welcome to new installed sites [ED-23059] (#34863)
Ntnelbaba Feb 24, 2026
15ba8ce
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
75ab946
Internal: Update packages [ED--22743] (#34868)
hein-obox Feb 24, 2026
dd95153
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
eb1ee0c
Revert "Internal: Reduce onboarding image sizes [ED-23025]" (#34871)
louiswol94 Feb 24, 2026
c610723
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
13007a3
Internal: Split components sanitization logic side effects [ED-23060]…
IshayMaya Feb 24, 2026
3a0181d
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
fd4dc49
Internal: Navigator shows child elements [ED-21804] (#34840)
mykytamurzin Feb 24, 2026
4c92785
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
d6f0a7f
Internal: Update interactions promotion logic [ED-22094] (#34870)
nami-p Feb 24, 2026
0359159
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
16a8f45
Internal: Final onboarding step [ED-23096] (#34869)
louiswol94 Feb 24, 2026
b9a4ead
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
6b7861a
Internal: Display Synced Typography in Site Settings (#34845)
asafdl Feb 24, 2026
4498ce7
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
ab1e6cb
Internal: Skip flaky tests [ED-23111] (#34880)
mike-elementor Feb 24, 2026
9b9861b
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
0c8c1bd
Internal: Refactor test to use navigation request instead of variable…
louiswol94 Feb 24, 2026
08155d7
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
19c9328
Internal: Interactions are not filtered based on breakpoints [ED-2310…
mike-elementor Feb 24, 2026
932dee1
Merge branch 'main' into feat/markdown-rendering
elementorbot Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/workflows/lighthouse.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ jobs:
steps:
- name: Checkout source code
uses: actions/checkout@v4

- name: Remove package.json
run: rm -f package*.json

- name: Install Node.js 20.x
uses: actions/setup-node@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ jobs:

- name: Build Packages
working-directory: packages
run: npm run build
run: npm run build:ci

- name: Publish Packages
working-directory: packages
Expand Down
21 changes: 14 additions & 7 deletions .grunt-config/sass.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,20 @@ const sass = {
dest: 'assets/css/modules/container-converter',
ext: '.css',
},
{
expand: true,
cwd: 'modules/notes/assets/scss',
src: 'editor.scss',
dest: 'assets/css/modules/notes',
ext: '.css',
},
{
expand: true,
cwd: 'modules/design-system-sync/assets/scss',
src: 'design-system-sync.scss',
dest: 'assets/css/modules/design-system-sync',
ext: '.css',
},
{
expand: true,
cwd: 'modules/notes/assets/scss',
src: 'editor.scss',
dest: 'assets/css/modules/notes',
ext: '.css',
},
{
expand: true,
cwd: 'assets/dev/scss/frontend',
Expand Down
40 changes: 33 additions & 7 deletions app/modules/e-onboarding/module.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,7 @@ private function set_onboarding_settings(): void {
'version' => self::VERSION,
'restUrl' => rest_url( 'elementor/v1/e-onboarding/' ),
'nonce' => wp_create_nonce( 'wp_rest' ),
'progress' => array_merge( $progress->to_array(), [
'current_step_id' => $progress->get_current_step_id() ?? $steps[0]['id'] ?? 'building_for',
'current_step_index' => $progress->get_current_step_index() ?? 0,
] ),
'progress' => $this->validate_progress_for_steps( $progress, $steps ),
'choices' => $choices->to_array(),
'hadUnexpectedExit' => $progress->had_unexpected_exit(),
'isConnected' => $is_connected,
Expand All @@ -112,10 +109,32 @@ private function set_onboarding_settings(): void {
'dashboard' => admin_url(),
'editor' => admin_url( 'edit.php?post_type=elementor_library' ),
'connect' => $this->get_connect_url(),
'comparePlans' => 'https://elementor.com/pricing/?utm_source=onboarding&utm_medium=wp-dash',
'exploreFeatures' => 'https://elementor.com/features/?utm_source=onboarding&utm_medium=wp-dash',
'createNewPage' => Plugin::$instance->documents->get_create_new_post_url(),
],
] );
}

private function validate_progress_for_steps( User_Progress $progress, array $steps ): array {
$progress_data = $progress->to_array();
$step_count = count( $steps );
$current_step_index = $progress->get_current_step_index() ?? 0;
$current_step_id = $progress->get_current_step_id() ?? $steps[0]['id'] ?? 'building_for';

$is_invalid_step_index = $current_step_index < 0 || $current_step_index >= $step_count;

if ( $is_invalid_step_index ) {
$current_step_id = $steps[0]['id'];
$current_step_index = 0;
}

$progress_data['current_step_id'] = $current_step_id;
$progress_data['current_step_index'] = $current_step_index;

return $progress_data;
}

private function is_user_connected(): bool {
$library = $this->get_library_app();

Expand Down Expand Up @@ -250,13 +269,20 @@ private function get_steps_config(): array {
'label' => __( 'Start with a theme that fits your needs', 'elementor' ),
'type' => 'single',
],
[
];

if ( ! $this->is_elementor_pro_active() ) {
$steps[] = [
'id' => 'site_features',
'label' => __( 'What do you want to include in your site?', 'elementor' ),
'type' => 'multiple',
],
];
];
}

return apply_filters( 'elementor/e-onboarding/steps', $steps );
}

private function is_elementor_pro_active(): bool {
return (bool) apply_filters( 'elementor/e-onboarding/is_elementor_pro_active', Utils::has_pro() );
}
}
5 changes: 3 additions & 2 deletions app/modules/import-export-customization/module.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Elementor\Modules\CloudKitLibrary\Module as CloudKitLibrary;
use Elementor\Modules\GlobalClasses\Global_Classes_REST_API;
use Elementor\Modules\System_Info\Reporters\Server;
use Elementor\Modules\Variables\Storage\Constants;
use Elementor\Modules\Variables\Storage\Variables_Collection;
use Elementor\Plugin;
use Elementor\Tools;
Expand Down Expand Up @@ -659,8 +660,8 @@ private function get_limits() {
? Global_Classes_REST_API::MAX_ITEMS
: 100;

$variables_limit = class_exists( Variables_Collection::class )
? Variables_Collection::TOTAL_VARIABLES_COUNT
$variables_limit = class_exists( Constants::class )
? Constants::TOTAL_VARIABLES_COUNT
: 100;

return [
Expand Down
25 changes: 8 additions & 17 deletions app/modules/onboarding/assets/js/utils/modules/event-dispatcher.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import mixpanel from 'mixpanel-browser';

export const ONBOARDING_EVENTS_MAP = {
UPGRADE_NOW_S3: 'core_onboarding_s3_upgrade_now',
Expand Down Expand Up @@ -46,31 +45,23 @@ export function isEventsManagerAvailable() {
'function' === typeof elementorCommon.eventsManager.dispatchEvent;
}

function isMixpanelInitialized() {
if ( 'undefined' === typeof mixpanel || ! mixpanel ) {
return false;
}

try {
const distinctId = mixpanel.get_distinct_id();
return distinctId !== undefined && distinctId !== null;
} catch ( error ) {
return false;
}
}

export function initializeAndEnableTracking() {
if ( ! isEventsManagerAvailable() ) {
return;
}

if ( ! isMixpanelInitialized() ) {
elementorCommon.eventsManager.initializeMixpanel();
if ( elementorCommon.eventsManager.trackingEnabled ) {
return;
}

if ( ! elementorCommon.eventsManager.trackingEnabled ) {
if ( elementorCommon.eventsManager.isMixpanelReady() ) {
elementorCommon.eventsManager.enableTracking();
return;
}

elementorCommon.eventsManager.initializeMixpanel(
() => elementorCommon.eventsManager.enableTracking(),
);
}

export function dispatch( eventName, payload = {} ) {
Expand Down
26 changes: 24 additions & 2 deletions assets/dev/js/editor/components/template-library/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import ComponentModalBase from 'elementor-api/modules/component-modal-base';
import * as commands from './commands/';
import * as commandsData from './commands-data/';
import { SAVE_CONTEXTS } from './constants';
import { EditorOneEventManager } from 'elementor-editor-utils/editor-one-events';

const TemplateLibraryLayoutView = require( 'elementor-templates/views/library-layout' );

Expand Down Expand Up @@ -110,11 +111,17 @@ export default class Component extends ComponentModalBase {
const currentTab = this.tabs[ tab ];
const filter = currentTab.getFilter ? currentTab.getFilter() : currentTab.filter;

this.trackLibraryNavigation( tab, currentTab.title );

this.currentTab = tab;

this.manager.setScreen( filter );
}

trackLibraryNavigation( tab, tabTitle ) {
EditorOneEventManager.sendELibraryNav( tabTitle || tab );
}

activateTab( tab ) {
$e.routes.saveState( 'library' );

Expand Down Expand Up @@ -178,13 +185,28 @@ export default class Component extends ComponentModalBase {
// TODO: Move function to 'insert-template' command.
insertTemplate( args ) {
this.downloadTemplate( args, ( data, callbackParams ) => {
const model = callbackParams.model;
const source = model.get( 'source' ) ?? 'local';
const templateType = model.get( 'type' );
const templateTitle = model.get( 'title' );
const templateId = model.get( 'template_id' );
const baseTier = elementor.config.library_connect?.base_access_tier;
const templateTier = model.get( 'accessTier' );

$e.run( 'document/elements/import', {
model: callbackParams.model,
model,
data,
options: callbackParams.importOptions,
onAfter: () => {
this.manager.eventManager.sendTemplateInsertedEvent( {
library_type: callbackParams.model.get( 'source' ) ?? 'local',
library_type: source,
} );

EditorOneEventManager.sendELibraryInsert( {
assetId: templateId,
assetName: templateTitle,
libraryType: templateType || source,
proRequired: baseTier !== templateTier,
} );
},
} );
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { EditorOneEventManager } from 'elementor-editor-utils/editor-one-events';

var TemplateLibraryTemplateView = require( 'elementor-templates/views/template/base' ),
TemplateLibraryTemplateRemoteView;

Expand Down Expand Up @@ -36,6 +38,17 @@ TemplateLibraryTemplateRemoteView = TemplateLibraryTemplateView.extend( {

elementor.templates.markAsFavorite( this.model, isFavorite );

const baseTier = elementor.config.library_connect?.base_access_tier;
const templateTier = this.model.get( 'accessTier' );

EditorOneEventManager.sendELibraryFavorite( {
assetId: this.model.get( 'template_id' ),
assetName: this.model.get( 'title' ),
libraryType: this.model.get( 'type' ) || this.model.get( 'source' ),
isFavorite,
proRequired: baseTier !== templateTier,
} );

if ( ! isFavorite && elementor.templates.getFilter( 'favorite' ) ) {
elementor.channels.templates.trigger( 'filter:change' );
}
Expand Down
2 changes: 1 addition & 1 deletion assets/dev/js/editor/controls/color.js
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ export default class extends ControlBaseDataView {

if ( v4Colors.length ) {
$globalPreviewItemsContainer.append(
this.createHeaderItemMarkup( __( 'Version 4 Variables', 'elementor' ) ),
this.createHeaderItemMarkup( __( 'Atomic Variables', 'elementor' ) ),
);

v4Colors.forEach( ( color ) => {
Expand Down
11 changes: 10 additions & 1 deletion assets/dev/js/editor/elements/views/container/empty-component.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
/* eslint-disable jsx-a11y/no-static-element-interactions */
/* eslint-disable jsx-a11y/click-events-have-key-events */
import { EditorOneEventManager } from 'elementor-editor-utils/editor-one-events';

export default function EmptyComponent() {
const handleClick = () => {
EditorOneEventManager.sendCanvasEmptyBoxAction( {
targetName: 'add_container',
} );
$e.route( 'panel/elements/categories' );
};

return (
<div className="elementor-first-add">
<div className="elementor-icon eicon-plus" onClick={ () => $e.route( 'panel/elements/categories' ) } />
<div className="elementor-icon eicon-plus" onClick={ handleClick } />
</div>
);
}
Loading