@elementor/editor-global-classes 4.1.0-beta1 → 4.1.0-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { StyleDefinitionID } from '@elementor/editor-styles';
2
+ import { StyleDefinitionID, StyleDefinition } from '@elementor/editor-styles';
3
3
 
4
4
  type ClassManagerPanelEmbeddedProps = {
5
5
  onRequestClose: () => void | Promise<void>;
@@ -20,6 +20,6 @@ type GlobalClassIndexEntry = {
20
20
 
21
21
  declare function addDocumentClasses(documentId: number): Promise<void>;
22
22
 
23
- declare function createLabelsForClasses(entries: GlobalClassIndexEntry[]): Record<StyleDefinitionID, string>;
23
+ declare function createLabelsForClasses(entries: Array<GlobalClassIndexEntry | StyleDefinition>): Record<StyleDefinitionID, string>;
24
24
 
25
25
  export { ClassManagerPanelEmbedded, type ClassManagerPanelEmbeddedProps, GLOBAL_CLASSES_URI, type GlobalClassIndexEntry, addDocumentClasses, createLabelsForClasses, init, loadExistingClasses };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { StyleDefinitionID } from '@elementor/editor-styles';
2
+ import { StyleDefinitionID, StyleDefinition } from '@elementor/editor-styles';
3
3
 
4
4
  type ClassManagerPanelEmbeddedProps = {
5
5
  onRequestClose: () => void | Promise<void>;
@@ -20,6 +20,6 @@ type GlobalClassIndexEntry = {
20
20
 
21
21
  declare function addDocumentClasses(documentId: number): Promise<void>;
22
22
 
23
- declare function createLabelsForClasses(entries: GlobalClassIndexEntry[]): Record<StyleDefinitionID, string>;
23
+ declare function createLabelsForClasses(entries: Array<GlobalClassIndexEntry | StyleDefinition>): Record<StyleDefinitionID, string>;
24
24
 
25
25
  export { ClassManagerPanelEmbedded, type ClassManagerPanelEmbeddedProps, GLOBAL_CLASSES_URI, type GlobalClassIndexEntry, addDocumentClasses, createLabelsForClasses, init, loadExistingClasses };
package/dist/index.js CHANGED
@@ -282,6 +282,20 @@ var slice = (0, import_store.__createSlice)({
282
282
  state.classLabels[id2] = previewClassData.label;
283
283
  }
284
284
  });
285
+ },
286
+ setOrderWithoutHistory(state, { payload }) {
287
+ state.data.order = payload;
288
+ },
289
+ updateAfterTemplateImport(state, {
290
+ payload
291
+ }) {
292
+ state.initialData.frontend.items = { ...state.initialData.frontend.items, ...payload.addedItems };
293
+ state.initialData.frontend.order = [...state.initialData.frontend.order, ...payload.addedIdsOrder];
294
+ state.initialData.preview.items = { ...state.initialData.preview.items, ...payload.addedItems };
295
+ state.initialData.preview.order = [...state.initialData.preview.order, ...payload.addedIdsOrder];
296
+ state.data.items = { ...state.data.items, ...payload.addedItems };
297
+ state.data.order = [...state.data.order, ...payload.addedIdsOrder];
298
+ state.classLabels = { ...state.classLabels, ...payload.addedClassLabels };
285
299
  }
286
300
  }
287
301
  });
@@ -2030,8 +2044,9 @@ var useFilteredCssClasses = () => {
2030
2044
  [cssClasses]
2031
2045
  );
2032
2046
  const filteredClasses = (0, import_react8.useMemo)(() => {
2033
- if (searchValue.length > 1) {
2034
- return lowercaseLabels.filter((cssClass) => cssClass.lowerLabel.includes(searchValue.toLowerCase()));
2047
+ const normalizedSearch = searchValue.replace(/[^a-zA-Z0-9_-]/g, "").toLowerCase();
2048
+ if (normalizedSearch.length > 1) {
2049
+ return lowercaseLabels.filter((cssClass) => cssClass.lowerLabel.includes(normalizedSearch));
2035
2050
  }
2036
2051
  return cssClasses;
2037
2052
  }, [searchValue, cssClasses, lowercaseLabels]);
@@ -2529,7 +2544,7 @@ async function fetchAndMergeClasses() {
2529
2544
  }
2530
2545
 
2531
2546
  // src/global-classes-styles-provider.ts
2532
- var MAX_CLASSES = 5e3;
2547
+ var MAX_CLASSES = 1e3;
2533
2548
  var GLOBAL_CLASSES_PROVIDER_KEY = "global-classes";
2534
2549
  var PREGENERATED_LINK_PATTERN = /^global-([0-9]+-)?(preview|frontend)-[a-zA-Z_-]+-css$/;
2535
2550
  var globalClassesStylesProvider = (0, import_editor_styles_repository2.createStylesProvider)({
@@ -2672,7 +2687,7 @@ var import_editor_mcp2 = require("@elementor/editor-mcp");
2672
2687
  var import_editor_panels2 = require("@elementor/editor-panels");
2673
2688
  var import_editor_styles_repository5 = require("@elementor/editor-styles-repository");
2674
2689
  var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
2675
- var import_store31 = require("@elementor/store");
2690
+ var import_store32 = require("@elementor/store");
2676
2691
 
2677
2692
  // src/components/class-manager/class-manager-button.tsx
2678
2693
  var React20 = __toESM(require("react"));
@@ -2820,8 +2835,20 @@ var import_store28 = require("@elementor/store");
2820
2835
  function GlobalStylesImportListener() {
2821
2836
  const dispatch7 = (0, import_store28.__useDispatch)();
2822
2837
  (0, import_react11.useEffect)(() => {
2823
- const handleGlobalStylesImported = () => {
2824
- loadCurrentDocumentClasses();
2838
+ const handleGlobalStylesImported = async (event) => {
2839
+ const customEvent = event;
2840
+ const globalClasses = customEvent.detail?.global_classes;
2841
+ if (!globalClasses?.added_items_order || !globalClasses?.added_items || globalClasses?.added_items_order?.length === 0) {
2842
+ loadCurrentDocumentClasses();
2843
+ return;
2844
+ }
2845
+ dispatch7(
2846
+ slice.actions.updateAfterTemplateImport({
2847
+ addedItems: globalClasses.added_items,
2848
+ addedIdsOrder: globalClasses.added_items_order,
2849
+ addedClassLabels: createLabelsForClasses(Object.values(globalClasses.added_items))
2850
+ })
2851
+ );
2825
2852
  };
2826
2853
  window.addEventListener(import_editor_canvas.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported);
2827
2854
  return () => {
@@ -2831,16 +2858,29 @@ function GlobalStylesImportListener() {
2831
2858
  return null;
2832
2859
  }
2833
2860
 
2834
- // src/components/open-panel-from-url.tsx
2861
+ // src/components/open-panel-from-event.tsx
2835
2862
  var import_react12 = require("react");
2863
+ var EVENT_OPEN_GLOBAL_CLASSES_MANAGER = "elementor/open-global-classes-manager";
2864
+ function OpenPanelFromEvent() {
2865
+ const { open } = usePanelActions();
2866
+ (0, import_react12.useEffect)(() => {
2867
+ const handler2 = () => open();
2868
+ window.addEventListener(EVENT_OPEN_GLOBAL_CLASSES_MANAGER, handler2);
2869
+ return () => window.removeEventListener(EVENT_OPEN_GLOBAL_CLASSES_MANAGER, handler2);
2870
+ }, [open]);
2871
+ return null;
2872
+ }
2873
+
2874
+ // src/components/open-panel-from-url.tsx
2875
+ var import_react13 = require("react");
2836
2876
  var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
2837
2877
  var ACTIVE_PANEL_PARAM = "active-panel";
2838
2878
  var PANEL_ID = "global-classes-manager";
2839
2879
  var DEFAULT_PANEL_ROUTE = "panel/elements";
2840
2880
  function OpenPanelFromUrl() {
2841
2881
  const { open } = usePanelActions();
2842
- const hasOpened = (0, import_react12.useRef)(false);
2843
- (0, import_react12.useEffect)(() => {
2882
+ const hasOpened = (0, import_react13.useRef)(false);
2883
+ (0, import_react13.useEffect)(() => {
2844
2884
  const urlParams = new URLSearchParams(window.location.search);
2845
2885
  const activePanel = urlParams.get(ACTIVE_PANEL_PARAM);
2846
2886
  if (activePanel !== PANEL_ID) {
@@ -2861,10 +2901,10 @@ function OpenPanelFromUrl() {
2861
2901
  }
2862
2902
 
2863
2903
  // src/components/populate-store.tsx
2864
- var import_react13 = require("react");
2904
+ var import_react14 = require("react");
2865
2905
  var import_editor_v1_adapters5 = require("@elementor/editor-v1-adapters");
2866
2906
  function PopulateStore() {
2867
- (0, import_react13.useEffect)(() => {
2907
+ (0, import_react14.useEffect)(() => {
2868
2908
  loadCurrentDocumentClasses();
2869
2909
  (0, import_editor_v1_adapters5.registerDataHook)("after", "editor/documents/attach-preview", async () => {
2870
2910
  await loadCurrentDocumentClasses();
@@ -3316,14 +3356,14 @@ var initMcpIntegration = (reg, canvasMcpEntry) => {
3316
3356
  };
3317
3357
 
3318
3358
  // src/sync-with-document.tsx
3319
- var import_react14 = require("react");
3359
+ var import_react15 = require("react");
3320
3360
  var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
3321
3361
 
3322
3362
  // src/sync-with-document-save.ts
3323
3363
  var import_editor_current_user3 = require("@elementor/editor-current-user");
3324
3364
  var import_editor_documents6 = require("@elementor/editor-documents");
3325
3365
  var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
3326
- var import_store29 = require("@elementor/store");
3366
+ var import_store30 = require("@elementor/store");
3327
3367
  var pendingSave = null;
3328
3368
  function syncWithDocumentSave(panelActions) {
3329
3369
  const unsubscribe = syncDirtyState();
@@ -3332,7 +3372,7 @@ function syncWithDocumentSave(panelActions) {
3332
3372
  return unsubscribe;
3333
3373
  }
3334
3374
  function syncDirtyState() {
3335
- return (0, import_store29.__subscribeWithSelector)(selectIsDirty, () => {
3375
+ return (0, import_store30.__subscribeWithSelector)(selectIsDirty, () => {
3336
3376
  if (!isDirty()) {
3337
3377
  return;
3338
3378
  }
@@ -3375,13 +3415,13 @@ function bindBeforeSaveTemplateAction() {
3375
3415
  }));
3376
3416
  }
3377
3417
  function isDirty() {
3378
- return selectIsDirty((0, import_store29.__getState)());
3418
+ return selectIsDirty((0, import_store30.__getState)());
3379
3419
  }
3380
3420
 
3381
3421
  // src/sync-with-document.tsx
3382
3422
  function SyncWithDocumentSave() {
3383
3423
  const { open: openClassPanel } = usePanelActions();
3384
- (0, import_react14.useEffect)(() => {
3424
+ (0, import_react15.useEffect)(() => {
3385
3425
  const unsubscribe = (0, import_editor_v1_adapters7.__privateListenTo)((0, import_editor_v1_adapters7.v1ReadyEvent)(), () => {
3386
3426
  const open = (0, import_editor_v1_adapters7.isExperimentActive)("e_editor_design_system_panel") ? () => {
3387
3427
  window.dispatchEvent(new CustomEvent("elementor/open-global-classes-manager"));
@@ -3395,7 +3435,7 @@ function SyncWithDocumentSave() {
3395
3435
 
3396
3436
  // src/init.ts
3397
3437
  function init() {
3398
- (0, import_store31.__registerSlice)(slice);
3438
+ (0, import_store32.__registerSlice)(slice);
3399
3439
  if (!(0, import_editor_v1_adapters8.isExperimentActive)("e_editor_design_system_panel")) {
3400
3440
  (0, import_editor_panels2.__registerPanel)(panel);
3401
3441
  }
@@ -3421,6 +3461,10 @@ function init() {
3421
3461
  id: "global-classes-open-panel-from-url",
3422
3462
  component: OpenPanelFromUrl
3423
3463
  });
3464
+ (0, import_editor.injectIntoLogic)({
3465
+ id: "global-classes-open-panel-from-event",
3466
+ component: OpenPanelFromEvent
3467
+ });
3424
3468
  }
3425
3469
  (0, import_editor_editing_panel2.injectIntoCssClassConvert)({
3426
3470
  id: "global-classes-convert-from-local-class",