( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ HEX
HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux mail.thebrand.ai 6.8.0-107-generic #107-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 13 19:51:50 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/tmpr/../tmpr/../tmpr/../tmpr/../editorMe/src/utils/init-fabric.ts
import {fabric} from 'fabric';
import {Canvas} from 'fabric/fabric-impl';
import {DEFAULT_OBJ_CONFIG} from '../objects/default-obj-config';
import {randomString} from '../common/utils/string/random-string';
import {state} from '../state/utils';

export function initFabric(canvasEl: HTMLCanvasElement): Canvas {
  const fabricCanvas = new fabric.Canvas(canvasEl, {width: 1, height: 1});
  fabricCanvas.preserveObjectStacking = true;
  fabricCanvas.selection = false;
  fabricCanvas.renderOnAddRemove = false;

  const textureSize = state().config.textureSize;
  if (textureSize) fabric.textureSize = textureSize;

  const userConfig = state().config.objectDefaults?.global;
  const objectDefaults = {
    ...userConfig,
    ...DEFAULT_OBJ_CONFIG,
  };

  Object.keys(objectDefaults).forEach(key => {
    // @ts-ignore
    fabric.Object.prototype[key] = objectDefaults[key];
  });

  // add ID to all objects
  fabricCanvas.on('object:added', e => {
    if (e.target && !e.target?.data?.id) {
      if (!e.target.data) e.target.data = {};
      e.target.data.id = randomString(10);
    }
  });

  // remove native fabric object controls
  const objectControls = fabric.Object.prototype.controls;
  Object.keys(objectControls).forEach(key => {
    delete objectControls[key];
  });

  return fabricCanvas;
}