@aeriz/wysiwyg 1.0.0 → 1.0.1
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/README.md +96 -0
- package/dist/aeriz-wysiwyg.css +10 -1
- package/dist/aeriz-wysiwyg.esm.js +308 -39
- package/dist/aeriz-wysiwyg.esm.min.js +908 -692
- package/dist/aeriz-wysiwyg.js +308 -39
- package/dist/aeriz-wysiwyg.min.css +1 -1
- package/dist/aeriz-wysiwyg.min.js +17 -17
- package/dist-types/core/AerizEditor.d.ts.map +1 -1
- package/dist-types/core/blocks.d.ts +10 -0
- package/dist-types/core/blocks.d.ts.map +1 -1
- package/dist-types/core/import-html.d.ts +13 -2
- package/dist-types/core/import-html.d.ts.map +1 -1
- package/package.json +3 -2
package/dist/aeriz-wysiwyg.js
CHANGED
|
@@ -2388,10 +2388,124 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2388
2388
|
function setLocale(locale) {
|
|
2389
2389
|
}
|
|
2390
2390
|
const STRIP_TAGS = ["script", "noscript", "meta", "link", "style", "base"];
|
|
2391
|
+
const INHERITED_PROPERTIES = /* @__PURE__ */ new Set([
|
|
2392
|
+
// CSS 2.1
|
|
2393
|
+
"border-collapse",
|
|
2394
|
+
"border-spacing",
|
|
2395
|
+
"caption-side",
|
|
2396
|
+
"color",
|
|
2397
|
+
"cursor",
|
|
2398
|
+
"direction",
|
|
2399
|
+
"empty-cells",
|
|
2400
|
+
"font-family",
|
|
2401
|
+
"font-size",
|
|
2402
|
+
"font-style",
|
|
2403
|
+
"font-variant",
|
|
2404
|
+
"font-weight",
|
|
2405
|
+
"letter-spacing",
|
|
2406
|
+
"line-height",
|
|
2407
|
+
"list-style",
|
|
2408
|
+
"list-style-image",
|
|
2409
|
+
"list-style-position",
|
|
2410
|
+
"list-style-type",
|
|
2411
|
+
"orphans",
|
|
2412
|
+
"quotes",
|
|
2413
|
+
"text-align",
|
|
2414
|
+
"text-indent",
|
|
2415
|
+
"text-transform",
|
|
2416
|
+
"visibility",
|
|
2417
|
+
"white-space",
|
|
2418
|
+
"widows",
|
|
2419
|
+
"word-spacing",
|
|
2420
|
+
// CSS 3+
|
|
2421
|
+
"caret-color",
|
|
2422
|
+
"font",
|
|
2423
|
+
"font-feature-settings",
|
|
2424
|
+
"font-kerning",
|
|
2425
|
+
"font-language-override",
|
|
2426
|
+
"font-optical-sizing",
|
|
2427
|
+
"font-palette",
|
|
2428
|
+
"font-size-adjust",
|
|
2429
|
+
"font-stretch",
|
|
2430
|
+
"font-synthesis",
|
|
2431
|
+
"font-synthesis-weight",
|
|
2432
|
+
"font-synthesis-style",
|
|
2433
|
+
"font-synthesis-small-caps",
|
|
2434
|
+
"font-variant-alternates",
|
|
2435
|
+
"font-variant-caps",
|
|
2436
|
+
"font-variant-east-asian",
|
|
2437
|
+
"font-variant-emoji",
|
|
2438
|
+
"font-variant-ligatures",
|
|
2439
|
+
"font-variant-numeric",
|
|
2440
|
+
"font-variant-position",
|
|
2441
|
+
"font-variation-settings",
|
|
2442
|
+
"hanging-punctuation",
|
|
2443
|
+
"hyphens",
|
|
2444
|
+
"image-rendering",
|
|
2445
|
+
"line-break",
|
|
2446
|
+
"overflow-wrap",
|
|
2447
|
+
"pointer-events",
|
|
2448
|
+
"ruby-align",
|
|
2449
|
+
"ruby-position",
|
|
2450
|
+
"tab-size",
|
|
2451
|
+
"text-align-last",
|
|
2452
|
+
"text-combine-upright",
|
|
2453
|
+
"text-decoration-color",
|
|
2454
|
+
"text-emphasis",
|
|
2455
|
+
"text-emphasis-color",
|
|
2456
|
+
"text-emphasis-position",
|
|
2457
|
+
"text-emphasis-style",
|
|
2458
|
+
"text-justify",
|
|
2459
|
+
"text-orientation",
|
|
2460
|
+
"text-rendering",
|
|
2461
|
+
"text-shadow",
|
|
2462
|
+
"text-size-adjust",
|
|
2463
|
+
"text-underline-offset",
|
|
2464
|
+
"text-underline-position",
|
|
2465
|
+
"white-space-collapse",
|
|
2466
|
+
"word-break",
|
|
2467
|
+
"word-wrap",
|
|
2468
|
+
"writing-mode",
|
|
2469
|
+
"color-scheme",
|
|
2470
|
+
"print-color-adjust",
|
|
2471
|
+
// Vendor
|
|
2472
|
+
"-webkit-font-smoothing",
|
|
2473
|
+
"-moz-osx-font-smoothing",
|
|
2474
|
+
"-webkit-locale",
|
|
2475
|
+
"-webkit-text-fill-color",
|
|
2476
|
+
"-webkit-text-stroke",
|
|
2477
|
+
"-webkit-text-stroke-color",
|
|
2478
|
+
"-webkit-text-stroke-width",
|
|
2479
|
+
"-webkit-print-color-adjust",
|
|
2480
|
+
// SVG
|
|
2481
|
+
"clip-rule",
|
|
2482
|
+
"color-interpolation",
|
|
2483
|
+
"color-interpolation-filters",
|
|
2484
|
+
"color-rendering",
|
|
2485
|
+
"fill",
|
|
2486
|
+
"fill-opacity",
|
|
2487
|
+
"fill-rule",
|
|
2488
|
+
"marker",
|
|
2489
|
+
"marker-end",
|
|
2490
|
+
"marker-mid",
|
|
2491
|
+
"marker-start",
|
|
2492
|
+
"paint-order",
|
|
2493
|
+
"shape-rendering",
|
|
2494
|
+
"stroke",
|
|
2495
|
+
"stroke-dasharray",
|
|
2496
|
+
"stroke-dashoffset",
|
|
2497
|
+
"stroke-linecap",
|
|
2498
|
+
"stroke-linejoin",
|
|
2499
|
+
"stroke-miterlimit",
|
|
2500
|
+
"stroke-opacity",
|
|
2501
|
+
"stroke-width",
|
|
2502
|
+
"text-anchor"
|
|
2503
|
+
]);
|
|
2391
2504
|
async function importHtmlWithComputedStyles(html, options = {}) {
|
|
2392
2505
|
const settleMs = options.settleMs ?? 1e3;
|
|
2393
2506
|
const timeoutMs = options.timeoutMs ?? 3e4;
|
|
2394
2507
|
const width = options.width ?? 1024;
|
|
2508
|
+
const mountTarget = options.mountTarget ?? null;
|
|
2395
2509
|
return new Promise((resolve, reject) => {
|
|
2396
2510
|
const iframe = document.createElement("iframe");
|
|
2397
2511
|
iframe.setAttribute("aria-hidden", "true");
|
|
@@ -2444,7 +2558,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2444
2558
|
fail(new Error("iframe document 접근 실패"));
|
|
2445
2559
|
return;
|
|
2446
2560
|
}
|
|
2447
|
-
const baked = bakeBodyToImportable(doc.body, w);
|
|
2561
|
+
const baked = bakeBodyToImportable(doc.body, w, mountTarget);
|
|
2448
2562
|
window.clearTimeout(timer);
|
|
2449
2563
|
finish(baked);
|
|
2450
2564
|
} catch (err) {
|
|
@@ -2461,23 +2575,30 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2461
2575
|
document.body.appendChild(iframe);
|
|
2462
2576
|
});
|
|
2463
2577
|
}
|
|
2464
|
-
function bakeBodyToImportable(body, win) {
|
|
2578
|
+
function bakeBodyToImportable(body, win, mountTarget) {
|
|
2465
2579
|
var _a;
|
|
2580
|
+
const doc = body.ownerDocument;
|
|
2581
|
+
if (!doc) throw new Error("body has no ownerDocument");
|
|
2466
2582
|
const wrapper = document.createElement("div");
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2583
|
+
const baseline = createBaselineProbe(doc, win, mountTarget);
|
|
2584
|
+
try {
|
|
2585
|
+
for (let i = 0; i < body.attributes.length; i++) {
|
|
2586
|
+
const attr = body.attributes.item(i);
|
|
2587
|
+
if (!attr) continue;
|
|
2588
|
+
if (attr.name === "style") continue;
|
|
2589
|
+
wrapper.setAttribute(attr.name, attr.value);
|
|
2590
|
+
}
|
|
2591
|
+
const wrapperStyle = computeMinimalInline(body, null, "div", baseline.get, win);
|
|
2592
|
+
if (wrapperStyle.length > 0) {
|
|
2593
|
+
wrapper.setAttribute("style", wrapperStyle);
|
|
2594
|
+
}
|
|
2595
|
+
for (const child of Array.from(body.children)) {
|
|
2596
|
+
const imported = document.importNode(child, true);
|
|
2597
|
+
applyComputedStylesParallel(child, imported, body, baseline.get, win);
|
|
2598
|
+
wrapper.appendChild(imported);
|
|
2599
|
+
}
|
|
2600
|
+
} finally {
|
|
2601
|
+
baseline.cleanup();
|
|
2481
2602
|
}
|
|
2482
2603
|
for (const tag of STRIP_TAGS) {
|
|
2483
2604
|
for (const el of Array.from(wrapper.querySelectorAll(tag))) {
|
|
@@ -2491,24 +2612,83 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2491
2612
|
wrapper.setAttribute("data-imported-html", "true");
|
|
2492
2613
|
return [wrapper];
|
|
2493
2614
|
}
|
|
2494
|
-
function
|
|
2615
|
+
function createBaselineProbe(iframeDoc, iframeWin, mountTarget) {
|
|
2616
|
+
var _a;
|
|
2617
|
+
let probeDoc;
|
|
2618
|
+
let probeWin;
|
|
2619
|
+
let probeHost;
|
|
2620
|
+
const targetWin = ((_a = mountTarget == null ? void 0 : mountTarget.ownerDocument) == null ? void 0 : _a.defaultView) ?? null;
|
|
2621
|
+
if (mountTarget && targetWin) {
|
|
2622
|
+
probeDoc = mountTarget.ownerDocument;
|
|
2623
|
+
probeWin = targetWin;
|
|
2624
|
+
const host = probeDoc.createElement("div");
|
|
2625
|
+
host.setAttribute("data-imported-html", "true");
|
|
2626
|
+
host.setAttribute("aria-hidden", "true");
|
|
2627
|
+
host.style.cssText = "position:absolute;left:-99999px;top:0;visibility:hidden;pointer-events:none;";
|
|
2628
|
+
mountTarget.appendChild(host);
|
|
2629
|
+
probeHost = host;
|
|
2630
|
+
} else {
|
|
2631
|
+
probeDoc = iframeDoc;
|
|
2632
|
+
probeWin = iframeWin;
|
|
2633
|
+
const host = probeDoc.createElement("div");
|
|
2634
|
+
host.setAttribute("aria-hidden", "true");
|
|
2635
|
+
host.style.cssText = "position:absolute;left:-99999px;top:0;width:0;height:0;overflow:hidden;visibility:hidden;";
|
|
2636
|
+
probeDoc.body.appendChild(host);
|
|
2637
|
+
probeHost = host;
|
|
2638
|
+
}
|
|
2639
|
+
const cache = /* @__PURE__ */ new Map();
|
|
2640
|
+
const get = (tagName) => {
|
|
2641
|
+
const cached = cache.get(tagName);
|
|
2642
|
+
if (cached) return cached;
|
|
2643
|
+
const probe = probeDoc.createElement(tagName);
|
|
2644
|
+
probeHost.appendChild(probe);
|
|
2645
|
+
const cs = probeWin.getComputedStyle(probe);
|
|
2646
|
+
const map = /* @__PURE__ */ new Map();
|
|
2647
|
+
for (let i = 0; i < cs.length; i++) {
|
|
2648
|
+
const prop = cs.item(i);
|
|
2649
|
+
if (prop) map.set(prop, cs.getPropertyValue(prop));
|
|
2650
|
+
}
|
|
2651
|
+
probeHost.removeChild(probe);
|
|
2652
|
+
cache.set(tagName, map);
|
|
2653
|
+
return map;
|
|
2654
|
+
};
|
|
2655
|
+
const cleanup = () => {
|
|
2656
|
+
if (probeHost.parentNode) probeHost.parentNode.removeChild(probeHost);
|
|
2657
|
+
};
|
|
2658
|
+
return { get, cleanup };
|
|
2659
|
+
}
|
|
2660
|
+
function computeMinimalInline(el, parent, baselineTagName, getBaseline, win) {
|
|
2495
2661
|
const cs = win.getComputedStyle(el);
|
|
2662
|
+
const parentCs = parent ? win.getComputedStyle(parent) : null;
|
|
2663
|
+
const baseline = getBaseline(baselineTagName);
|
|
2496
2664
|
let cssText = "";
|
|
2497
2665
|
for (let i = 0; i < cs.length; i++) {
|
|
2498
2666
|
const prop = cs.item(i);
|
|
2499
2667
|
if (!prop) continue;
|
|
2500
2668
|
const val = cs.getPropertyValue(prop);
|
|
2501
|
-
if (val
|
|
2502
|
-
|
|
2669
|
+
if (!val) continue;
|
|
2670
|
+
if (INHERITED_PROPERTIES.has(prop)) {
|
|
2671
|
+
if (parentCs && parentCs.getPropertyValue(prop) === val) continue;
|
|
2672
|
+
} else {
|
|
2673
|
+
if (baseline.get(prop) === val) continue;
|
|
2503
2674
|
}
|
|
2675
|
+
cssText += `${prop}:${val};`;
|
|
2504
2676
|
}
|
|
2505
2677
|
return cssText;
|
|
2506
2678
|
}
|
|
2507
|
-
function applyComputedStylesParallel(orig, copy, win) {
|
|
2679
|
+
function applyComputedStylesParallel(orig, copy, origParent, getBaseline, win) {
|
|
2508
2680
|
if (orig.nodeType === 1 && copy.nodeType === 1) {
|
|
2509
|
-
const cssText =
|
|
2681
|
+
const cssText = computeMinimalInline(
|
|
2682
|
+
orig,
|
|
2683
|
+
origParent,
|
|
2684
|
+
orig.tagName.toLowerCase(),
|
|
2685
|
+
getBaseline,
|
|
2686
|
+
win
|
|
2687
|
+
);
|
|
2510
2688
|
if (cssText.length > 0) {
|
|
2511
2689
|
copy.setAttribute("style", cssText);
|
|
2690
|
+
} else if (copy.hasAttribute("style")) {
|
|
2691
|
+
copy.removeAttribute("style");
|
|
2512
2692
|
}
|
|
2513
2693
|
}
|
|
2514
2694
|
const origChildren = orig.children;
|
|
@@ -2517,7 +2697,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2517
2697
|
for (let i = 0; i < n; i++) {
|
|
2518
2698
|
const oc = origChildren[i];
|
|
2519
2699
|
const cc = copyChildren[i];
|
|
2520
|
-
if (oc && cc) applyComputedStylesParallel(oc, cc, win);
|
|
2700
|
+
if (oc && cc) applyComputedStylesParallel(oc, cc, orig, getBaseline, win);
|
|
2521
2701
|
}
|
|
2522
2702
|
}
|
|
2523
2703
|
function markdownToBlocks(md) {
|
|
@@ -2734,6 +2914,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2734
2914
|
label: "단락",
|
|
2735
2915
|
allowsInlineFormat: true,
|
|
2736
2916
|
allowedMarks: ALL_INLINE_MARKS,
|
|
2917
|
+
allowsColor: true,
|
|
2918
|
+
allowsFontSize: true,
|
|
2737
2919
|
matches: (el) => el.tagName === "P" ? { kind: "paragraph", attrs: {} } : null,
|
|
2738
2920
|
create: () => fillEmpty(document.createElement("p")),
|
|
2739
2921
|
isEmpty: (el) => isElementBlank(el)
|
|
@@ -2745,6 +2927,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2745
2927
|
// 사용자 지정 — 제목은 italic 만 허용. (bold 는 heading 자체가 굵으므로
|
|
2746
2928
|
// 중복, underline / strike 는 가독성/시맨틱 면에서 부적합.)
|
|
2747
2929
|
allowedMarks: ["italic"],
|
|
2930
|
+
// 글자색/배경색은 시맨틱 헤딩 톤 보존을 위해 X.
|
|
2931
|
+
allowsColor: false,
|
|
2932
|
+
// 글자 크기는 heading level (h1~h6) 로 결정되므로 X.
|
|
2933
|
+
allowsFontSize: false,
|
|
2748
2934
|
matches: (el) => {
|
|
2749
2935
|
const m = /^H([1-6])$/.exec(el.tagName);
|
|
2750
2936
|
if (!m) return null;
|
|
@@ -2761,6 +2947,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2761
2947
|
label: "글머리 목록",
|
|
2762
2948
|
allowsInlineFormat: true,
|
|
2763
2949
|
allowedMarks: ALL_INLINE_MARKS,
|
|
2950
|
+
allowsColor: true,
|
|
2951
|
+
allowsFontSize: true,
|
|
2764
2952
|
matches: (el) => el.tagName === "UL" ? { kind: "bulletList", attrs: {} } : null,
|
|
2765
2953
|
create: () => createListElement("ul"),
|
|
2766
2954
|
isEmpty: (el) => isListEmpty(el)
|
|
@@ -2770,6 +2958,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2770
2958
|
label: "번호 매기기 목록",
|
|
2771
2959
|
allowsInlineFormat: true,
|
|
2772
2960
|
allowedMarks: ALL_INLINE_MARKS,
|
|
2961
|
+
allowsColor: true,
|
|
2962
|
+
allowsFontSize: true,
|
|
2773
2963
|
matches: (el) => el.tagName === "OL" ? { kind: "orderedList", attrs: {} } : null,
|
|
2774
2964
|
create: () => createListElement("ol"),
|
|
2775
2965
|
isEmpty: (el) => isListEmpty(el)
|
|
@@ -2781,6 +2971,9 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2781
2971
|
// 사용자 지정 — 인용구는 italic 제외(인용 자체가 이미 italic 으로 렌더되어
|
|
2782
2972
|
// 중복). bold / underline / strike 만 허용.
|
|
2783
2973
|
allowedMarks: ["bold", "underline", "strike"],
|
|
2974
|
+
// 인용구 자체의 톤(이탤릭/주변 색조) 을 보존.
|
|
2975
|
+
allowsColor: false,
|
|
2976
|
+
allowsFontSize: true,
|
|
2784
2977
|
matches: (el) => el.tagName === "BLOCKQUOTE" ? { kind: "blockquote", attrs: {} } : null,
|
|
2785
2978
|
create: () => {
|
|
2786
2979
|
const bq = document.createElement("blockquote");
|
|
@@ -2794,6 +2987,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2794
2987
|
label: "코드 블록",
|
|
2795
2988
|
allowsInlineFormat: false,
|
|
2796
2989
|
allowedMarks: [],
|
|
2990
|
+
// 코드 블록은 인라인 서식은 막혀 있지만 글자 크기 조정은 (가독성) 의미가
|
|
2991
|
+
// 있어 예외적으로 허용. 색은 syntax highlight 와 충돌하므로 X.
|
|
2992
|
+
allowsColor: false,
|
|
2993
|
+
allowsFontSize: true,
|
|
2797
2994
|
matches: (el) => {
|
|
2798
2995
|
if (el.tagName !== "PRE") return null;
|
|
2799
2996
|
const code = el.querySelector(":scope > code");
|
|
@@ -2814,6 +3011,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2814
3011
|
label: "이미지",
|
|
2815
3012
|
allowsInlineFormat: false,
|
|
2816
3013
|
allowedMarks: [],
|
|
3014
|
+
allowsColor: false,
|
|
3015
|
+
allowsFontSize: false,
|
|
2817
3016
|
matches: (el) => {
|
|
2818
3017
|
if (el.tagName === "FIGURE") {
|
|
2819
3018
|
const img = el.querySelector(":scope > img");
|
|
@@ -2877,6 +3076,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2877
3076
|
label: "표",
|
|
2878
3077
|
allowsInlineFormat: true,
|
|
2879
3078
|
allowedMarks: ALL_INLINE_MARKS,
|
|
3079
|
+
allowsColor: true,
|
|
3080
|
+
allowsFontSize: true,
|
|
2880
3081
|
matches: (el) => {
|
|
2881
3082
|
var _a;
|
|
2882
3083
|
if (el.tagName !== "TABLE") return null;
|
|
@@ -2909,6 +3110,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2909
3110
|
label: "구분선",
|
|
2910
3111
|
allowsInlineFormat: false,
|
|
2911
3112
|
allowedMarks: [],
|
|
3113
|
+
allowsColor: false,
|
|
3114
|
+
allowsFontSize: false,
|
|
2912
3115
|
matches: (el) => el.tagName === "HR" ? { kind: "hr", attrs: {} } : null,
|
|
2913
3116
|
create: () => {
|
|
2914
3117
|
const hr = document.createElement("hr");
|
|
@@ -2922,6 +3125,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2922
3125
|
label: "유튜브",
|
|
2923
3126
|
allowsInlineFormat: false,
|
|
2924
3127
|
allowedMarks: [],
|
|
3128
|
+
allowsColor: false,
|
|
3129
|
+
allowsFontSize: false,
|
|
2925
3130
|
matches: (el) => {
|
|
2926
3131
|
if (el.tagName !== "DIV") return null;
|
|
2927
3132
|
if (!el.classList.contains("aw-youtube-embed")) return null;
|
|
@@ -2962,6 +3167,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2962
3167
|
label: "링크",
|
|
2963
3168
|
allowsInlineFormat: false,
|
|
2964
3169
|
allowedMarks: [],
|
|
3170
|
+
allowsColor: false,
|
|
3171
|
+
allowsFontSize: false,
|
|
2965
3172
|
matches: (el) => {
|
|
2966
3173
|
var _a, _b, _c, _d, _e;
|
|
2967
3174
|
if (el.tagName !== "A") return null;
|
|
@@ -3049,6 +3256,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3049
3256
|
label: "파일",
|
|
3050
3257
|
allowsInlineFormat: false,
|
|
3051
3258
|
allowedMarks: [],
|
|
3259
|
+
allowsColor: false,
|
|
3260
|
+
allowsFontSize: false,
|
|
3052
3261
|
matches: (el) => {
|
|
3053
3262
|
if (el.tagName !== "A") return null;
|
|
3054
3263
|
if (!el.classList.contains("aw-file-attachment")) return null;
|
|
@@ -3132,6 +3341,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3132
3341
|
label: "HTML",
|
|
3133
3342
|
allowsInlineFormat: false,
|
|
3134
3343
|
allowedMarks: [],
|
|
3344
|
+
allowsColor: false,
|
|
3345
|
+
allowsFontSize: false,
|
|
3135
3346
|
matches: (el) => {
|
|
3136
3347
|
if (el.tagName !== "DIV") return null;
|
|
3137
3348
|
if (el.getAttribute("data-imported-html") !== "true") return null;
|
|
@@ -3156,6 +3367,8 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3156
3367
|
label: "알 수 없음",
|
|
3157
3368
|
allowsInlineFormat: false,
|
|
3158
3369
|
allowedMarks: [],
|
|
3370
|
+
allowsColor: false,
|
|
3371
|
+
allowsFontSize: false,
|
|
3159
3372
|
matches: () => null,
|
|
3160
3373
|
create: () => fillEmpty(document.createElement("p")),
|
|
3161
3374
|
isEmpty: (el) => isElementBlank(el)
|
|
@@ -3430,6 +3643,72 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
3430
3643
|
if (!target) return;
|
|
3431
3644
|
while (target.firstChild) target.removeChild(target.firstChild);
|
|
3432
3645
|
for (const node of content) target.appendChild(node);
|
|
3646
|
+
const type = BLOCK_TYPE_BY_KIND[kind];
|
|
3647
|
+
if (type) sanitizeInlineFormat(target, type);
|
|
3648
|
+
}
|
|
3649
|
+
function sanitizeInlineFormat(container, type) {
|
|
3650
|
+
const allowed = new Set(type.allowedMarks);
|
|
3651
|
+
for (const el of Array.from(container.querySelectorAll("*"))) {
|
|
3652
|
+
if (!(el instanceof HTMLElement)) continue;
|
|
3653
|
+
if (!el.parentNode) continue;
|
|
3654
|
+
const tag = el.tagName.toLowerCase();
|
|
3655
|
+
if ((tag === "b" || tag === "strong") && !allowed.has("bold") || (tag === "i" || tag === "em") && !allowed.has("italic") || tag === "u" && !allowed.has("underline") || (tag === "s" || tag === "strike" || tag === "del") && !allowed.has("strike")) {
|
|
3656
|
+
unwrapElement(el);
|
|
3657
|
+
continue;
|
|
3658
|
+
}
|
|
3659
|
+
if (tag === "span" || tag === "font") {
|
|
3660
|
+
const s = el.style;
|
|
3661
|
+
if (!allowed.has("bold")) {
|
|
3662
|
+
const fw = s.fontWeight;
|
|
3663
|
+
if (fw === "bold" || fw === "bolder" || /^[7-9]\d{2}$|^1000$/.test(fw)) {
|
|
3664
|
+
s.removeProperty("font-weight");
|
|
3665
|
+
}
|
|
3666
|
+
}
|
|
3667
|
+
if (!allowed.has("italic") && s.fontStyle === "italic") {
|
|
3668
|
+
s.removeProperty("font-style");
|
|
3669
|
+
}
|
|
3670
|
+
const td = s.textDecorationLine || s.textDecoration || "";
|
|
3671
|
+
if (td) {
|
|
3672
|
+
const parts = td.split(/\s+/);
|
|
3673
|
+
const kept = parts.filter((p) => {
|
|
3674
|
+
if (p === "underline" && !allowed.has("underline")) return false;
|
|
3675
|
+
if (p === "line-through" && !allowed.has("strike")) return false;
|
|
3676
|
+
return true;
|
|
3677
|
+
});
|
|
3678
|
+
if (kept.length !== parts.length) {
|
|
3679
|
+
s.removeProperty("text-decoration");
|
|
3680
|
+
s.removeProperty("text-decoration-line");
|
|
3681
|
+
if (kept.length > 0) s.textDecoration = kept.join(" ");
|
|
3682
|
+
}
|
|
3683
|
+
}
|
|
3684
|
+
if (!type.allowsColor) {
|
|
3685
|
+
s.removeProperty("color");
|
|
3686
|
+
s.removeProperty("background-color");
|
|
3687
|
+
if (tag === "font") el.removeAttribute("color");
|
|
3688
|
+
}
|
|
3689
|
+
if (!type.allowsFontSize) {
|
|
3690
|
+
s.removeProperty("font-size");
|
|
3691
|
+
if (tag === "font") el.removeAttribute("size");
|
|
3692
|
+
}
|
|
3693
|
+
if (!type.allowsInlineFormat) {
|
|
3694
|
+
s.removeProperty("font-family");
|
|
3695
|
+
if (tag === "font") el.removeAttribute("face");
|
|
3696
|
+
}
|
|
3697
|
+
const hasStyle = s.cssText.trim().length > 0;
|
|
3698
|
+
const hasOtherAttrs = Array.from(el.attributes).some(
|
|
3699
|
+
(a) => a.name !== "style"
|
|
3700
|
+
);
|
|
3701
|
+
if (!hasStyle && !hasOtherAttrs) {
|
|
3702
|
+
unwrapElement(el);
|
|
3703
|
+
}
|
|
3704
|
+
}
|
|
3705
|
+
}
|
|
3706
|
+
}
|
|
3707
|
+
function unwrapElement(el) {
|
|
3708
|
+
const parent = el.parentNode;
|
|
3709
|
+
if (!parent) return;
|
|
3710
|
+
while (el.firstChild) parent.insertBefore(el.firstChild, el);
|
|
3711
|
+
parent.removeChild(el);
|
|
3433
3712
|
}
|
|
3434
3713
|
function resolveTheme(theme = {}) {
|
|
3435
3714
|
const fg = theme.fg || "currentColor";
|
|
@@ -4752,7 +5031,9 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4752
5031
|
}
|
|
4753
5032
|
let imported;
|
|
4754
5033
|
try {
|
|
4755
|
-
imported = await importHtmlWithComputedStyles(result.html
|
|
5034
|
+
imported = await importHtmlWithComputedStyles(result.html, {
|
|
5035
|
+
mountTarget: this.content
|
|
5036
|
+
});
|
|
4756
5037
|
} catch (err) {
|
|
4757
5038
|
console.error("HTML 가져오기 실패:", err);
|
|
4758
5039
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -5269,27 +5550,15 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
5269
5550
|
const type = BLOCK_TYPE_BY_KIND[active.kind] ?? BLOCK_TYPE_BY_KIND.unknown;
|
|
5270
5551
|
return type.allowsInlineFormat;
|
|
5271
5552
|
}
|
|
5272
|
-
const FONT_SIZE_ALLOWED_KINDS = /* @__PURE__ */ new Set([
|
|
5273
|
-
"paragraph",
|
|
5274
|
-
"bulletList",
|
|
5275
|
-
"orderedList",
|
|
5276
|
-
"blockquote",
|
|
5277
|
-
"codeBlock",
|
|
5278
|
-
"table"
|
|
5279
|
-
]);
|
|
5280
5553
|
function isFontSizeAllowed(active) {
|
|
5281
5554
|
if (!active) return false;
|
|
5282
|
-
|
|
5555
|
+
const type = BLOCK_TYPE_BY_KIND[active.kind] ?? BLOCK_TYPE_BY_KIND.unknown;
|
|
5556
|
+
return type.allowsFontSize;
|
|
5283
5557
|
}
|
|
5284
|
-
const COLOR_ALLOWED_KINDS = /* @__PURE__ */ new Set([
|
|
5285
|
-
"paragraph",
|
|
5286
|
-
"bulletList",
|
|
5287
|
-
"orderedList",
|
|
5288
|
-
"table"
|
|
5289
|
-
]);
|
|
5290
5558
|
function isColorAllowed(active) {
|
|
5291
5559
|
if (!active) return false;
|
|
5292
|
-
|
|
5560
|
+
const type = BLOCK_TYPE_BY_KIND[active.kind] ?? BLOCK_TYPE_BY_KIND.unknown;
|
|
5561
|
+
return type.allowsColor;
|
|
5293
5562
|
}
|
|
5294
5563
|
const ALIGN_ALLOWED_KINDS = /* @__PURE__ */ new Set([
|
|
5295
5564
|
"paragraph",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.aeriz-wysiwyg{--aw-bg: #ffffff;--aw-fg: #1a1a1a;--aw-fg-muted: #6b7280;--aw-border: #e5e7eb;--aw-toolbar-bg: #f9fafb;--aw-toolbar-fg: #374151;--aw-btn-hover-bg: #e5e7eb;--aw-btn-active-bg: #dbeafe;--aw-btn-active-fg: #1d4ed8;--aw-primary: #03c75a;--aw-primary-fg: #ffffff;--aw-primary-hover: #02b150;--aw-divider: #e5e7eb;--aw-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--aw-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--aw-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--aw-radius: 6px;--aw-radius-sm: 4px;--aw-font: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Pretendard", "Noto Sans KR", "Malgun Gothic", sans-serif;--aw-font-mono: "SF Mono", Menlo, Monaco, Consolas, "D2Coding", monospace;--aw-toolbar-height: 44px;--aw-z-toolbar: 10;--aw-z-popover: 100;--aw-z-dialog: 1000}.aeriz-wysiwyg[data-theme=dark]{--aw-bg: #0a0e14;--aw-fg: #e7eef5;--aw-fg-muted: #6a7a8a;--aw-border: rgba(100, 200, 255, .12);--aw-toolbar-bg: #0d1320;--aw-toolbar-fg: #cfd6dd;--aw-btn-hover-bg: rgba(100, 200, 255, .06);--aw-btn-active-bg: rgba(100, 200, 255, .14);--aw-btn-active-fg: #64c8ff;--aw-primary: #64c8ff;--aw-primary-fg: #050810;--aw-primary-hover: #8ad6ff;--aw-divider: rgba(100, 200, 255, .12)}.aeriz-wysiwyg{font-family:var(--aw-font);background-color:var(--aw-bg);color:var(--aw-fg);border:1px solid var(--aw-border);border-radius:var(--aw-radius);overflow:hidden;display:flex;flex-direction:column;height:100%;min-height:320px;box-shadow:var(--aw-shadow-sm)}.aeriz-wysiwyg *,.aeriz-wysiwyg *:before,.aeriz-wysiwyg *:after{box-sizing:border-box}.aw-content-wrap{flex:1;min-height:0;overflow-y:auto;background-color:var(--aw-bg);position:relative}.aeriz-wysiwyg-viewer{height:auto;min-height:0}.aeriz-wysiwyg-viewer .aw-content-wrap{flex:0 0 auto;overflow:visible;min-height:0}.aeriz-wysiwyg-viewer .aw-content{min-height:0}.aw-block-handles{position:absolute;top:0;left:0;width:24px;height:100%;pointer-events:none;z-index:2}.aw-block-controls{position:absolute;left:4px;display:flex;flex-direction:column;gap:0;pointer-events:none;opacity:0;transition:opacity .12s ease}.aw-content-wrap:hover .aw-block-controls{opacity:.45}.aw-block-controls:hover{opacity:1}.aw-block-handle,.aw-block-add{width:18px;height:22px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:3px;color:var(--aw-fg-muted);pointer-events:auto;-webkit-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;cursor:pointer;transition:color .12s,background-color .12s,border-color .12s}.aw-block-handle{cursor:grab}.aw-block-handle svg,.aw-block-add svg{width:12px;height:14px}.aw-block-handle:hover,.aw-block-add:hover{color:var(--aw-btn-active-fg, var(--aw-primary));background-color:var(--aw-btn-hover-bg);border-color:var(--aw-border)}.aw-block-handle.is-dragging{cursor:grabbing;color:var(--aw-primary)}.is-block-dragging{opacity:.4}.aw-block-drop-indicator{position:absolute;left:28px;right:28px;height:2px;background:var(--aw-primary);border-radius:1px;pointer-events:none;z-index:3;transform:translateY(-1px);box-shadow:0 0 6px var(--aw-primary)}.aw-status-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:5px 12px;border-top:1px solid var(--aw-border);background-color:var(--aw-toolbar-bg);color:var(--aw-fg-muted);font-family:var(--aw-font-mono);font-size:11px;letter-spacing:.02em;flex-shrink:0}.aw-status-left,.aw-status-right{display:inline-flex;align-items:center;gap:12px;min-width:0}.aw-status-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aw-status-item:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--aw-primary);opacity:.55;flex-shrink:0}.aw-status-action{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:transparent;border:1px solid transparent;color:var(--aw-fg-muted);padding:0;width:22px;height:22px;border-radius:3px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .12s,background-color .12s,border-color .12s}.aw-status-action svg{width:13px;height:13px}.aw-status-action:hover{color:var(--aw-btn-active-fg, var(--aw-primary));background-color:var(--aw-btn-hover-bg);border-color:var(--aw-border)}.aw-status-action:active{background-color:var(--aw-btn-active-bg)}.aeriz-wysiwyg-viewer .aw-status-bar{display:none}.aw-content>[data-block-id]{position:relative;transition:background-color .12s ease,box-shadow .12s ease}.aw-content>[data-block-focused]{background-color:color-mix(in srgb,var(--aw-primary) 8%,transparent);box-shadow:-3px 0 0 var(--aw-primary);border-radius:2px}.aw-block-label-pill{position:absolute;z-index:4;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:var(--aw-font-mono);font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--aw-primary);background:var(--aw-bg);padding:2px 6px;border:1px solid var(--aw-primary);border-radius:3px;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;gap:4px;line-height:1;transition:transform .12s ease,background-color .12s,color .12s,box-shadow .12s}.aw-block-label-pill:after{content:"▾";font-size:9px;opacity:.7}.aw-block-label-pill:hover{background:var(--aw-primary);color:var(--aw-bg);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--aw-primary) 35%,transparent)}.aw-block-label-pill:active{transform:translateY(0)}.aw-content{outline:none;padding:24px 28px;min-height:240px;font-size:15px;line-height:1.7;color:var(--aw-fg);word-break:break-word}.aw-content:empty:before,.aw-content[data-placeholder]:has(p:only-child>br:only-child):before{content:attr(data-placeholder);color:var(--aw-fg-muted);pointer-events:none;position:absolute}.aw-content>p{margin:0 0 .8em}.aw-content>p:last-child{margin-bottom:0}.aw-content h1,.aw-content h2,.aw-content h3{font-weight:700;margin:.6em 0 .4em;padding-bottom:.25em;border-bottom:1px solid var(--aw-border)}.aw-content h1{font-size:1.875rem;line-height:1.3}.aw-content h2{font-size:1.5rem;line-height:1.35}.aw-content h3{font-size:1.25rem;line-height:1.4}.aw-content blockquote{margin:1em 0;padding:.5em 1em;border-left:4px solid var(--aw-primary);background-color:color-mix(in srgb,var(--aw-primary) 8%,transparent);color:var(--aw-fg);font-style:italic}.aw-content pre{position:relative;background-color:color-mix(in srgb,var(--aw-fg) 6%,var(--aw-bg));border:1px solid var(--aw-border);border-radius:var(--aw-radius-sm);padding:12px 16px;font-family:var(--aw-font-mono);font-size:13px;line-height:1.6;overflow-x:auto;margin:1em 0}.aw-content>pre>code[data-language]:not([data-language=""]):before{content:attr(data-language);position:absolute;top:6px;right:10px;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--aw-fg-muted);background:color-mix(in srgb,var(--aw-fg) 10%,transparent);padding:2px 8px;border-radius:4px;pointer-events:none;-webkit-user-select:none;user-select:none}.aw-content code{font-family:var(--aw-font-mono);font-size:.9em;background-color:color-mix(in srgb,var(--aw-fg) 8%,transparent);padding:.15em .4em;border-radius:3px}.aw-content pre code{background:transparent;padding:0}.aw-content pre code .hl-keyword{color:#c678dd;font-weight:600}.aw-content pre code .hl-string{color:#98c379}.aw-content pre code .hl-number{color:#d19a66}.aw-content pre code .hl-comment{color:var(--aw-fg-muted);font-style:italic}.aw-content pre code .hl-fn{color:#61afef}.aw-content pre code .hl-builtin{color:#56b6c2}.aw-content pre code .hl-tag{color:#e06c75}.aw-content pre code .hl-attr{color:#d19a66}.aw-content pre code .hl-prop{color:#61afef}.aw-content pre code .hl-punct{color:var(--aw-fg-muted)}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-keyword{color:#a626a4}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-string{color:#50a14f}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-number{color:#986801}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-fn{color:#4078f2}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-builtin{color:#0184bc}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-tag{color:#e45649}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-prop{color:#4078f2}.aw-content ul,.aw-content ol{margin:.6em 0;padding-left:1.6em}.aw-content li{margin:.2em 0}.aw-content a{color:var(--aw-primary);text-decoration:underline}.aw-content img{max-width:100%;height:auto;border-radius:var(--aw-radius-sm);margin:.5em 0}.aw-content hr{border:none;border-top:1px solid var(--aw-border);margin:1.5em 0}.aw-content>div.aw-youtube-embed{position:relative;width:100%;aspect-ratio:16 / 9;margin:1em 0;border-radius:8px;overflow:hidden;background:#000;border:1px solid var(--aw-border)}.aw-content>div.aw-youtube-embed iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0;display:block}.aw-content>a.aw-file-attachment{display:flex;align-items:center;gap:12px;margin:1em 0;padding:10px 14px;border:1px solid var(--aw-border);border-radius:8px;background:var(--aw-bg);color:var(--aw-fg);text-decoration:none;transition:background-color .08s,border-color .08s;cursor:pointer;-webkit-user-select:none;user-select:none}.aw-content>a.aw-file-attachment:hover{background:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg));border-color:color-mix(in srgb,var(--aw-primary) 40%,var(--aw-border))}.aw-content>a.aw-file-attachment .aw-file-icon{flex:0 0 auto;display:inline-flex;width:36px;height:36px;align-items:center;justify-content:center;border-radius:6px;background:color-mix(in srgb,var(--aw-primary) 12%,transparent);color:var(--aw-primary)}.aw-content>a.aw-file-attachment .aw-file-icon svg{width:20px;height:20px}.aw-content>a.aw-file-attachment .aw-file-meta{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.aw-content>a.aw-file-attachment .aw-file-name{font-weight:600;font-size:.95rem;color:var(--aw-fg);word-break:break-all;line-height:1.3}.aw-content>a.aw-file-attachment .aw-file-info{font-size:.75rem;color:var(--aw-fg-muted);font-family:var(--aw-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);letter-spacing:.02em}.aw-content>a.aw-file-attachment .aw-file-action{flex:0 0 auto;display:inline-flex;width:32px;height:32px;align-items:center;justify-content:center;color:var(--aw-fg-muted)}.aw-content>a.aw-file-attachment .aw-file-action svg{width:18px;height:18px}.aw-content>a.aw-file-attachment:hover .aw-file-action{color:var(--aw-primary)}.aw-content>a.aw-link-card{display:flex;align-items:stretch;gap:14px;text-decoration:none;margin:1em 0;padding:0;border:1px solid var(--aw-border);border-radius:8px;background-color:color-mix(in srgb,var(--aw-primary) 5%,var(--aw-bg));color:var(--aw-fg);overflow:hidden;transition:border-color .12s,background-color .12s}.aw-content>a.aw-link-card:hover{border-color:var(--aw-primary);background-color:color-mix(in srgb,var(--aw-primary) 9%,var(--aw-bg))}.aw-content>a.aw-link-card>.aw-link-card-image{flex:0 0 auto;width:120px;height:auto;object-fit:cover;align-self:stretch;background:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg))}.aw-content>a.aw-link-card>.aw-link-card-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px;padding:12px 14px}.aw-content>a.aw-link-card .aw-link-card-title{font-weight:600;font-size:1rem;line-height:1.3;color:var(--aw-fg);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aw-content>a.aw-link-card .aw-link-card-desc{font-size:.85rem;line-height:1.4;color:var(--aw-fg-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aw-content>a.aw-link-card .aw-link-card-url{display:flex;align-items:center;gap:6px;margin-top:2px;font-size:.78rem;color:var(--aw-primary);font-family:var(--aw-font-mono);word-break:break-all}.aw-content>a.aw-link-card .aw-link-card-favicon{flex:0 0 auto;width:14px;height:14px;border-radius:2px;background:transparent}.aw-content>a.aw-link-card .aw-link-card-url-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aw-content table{border-collapse:collapse;width:100%;margin:1em 0}.aw-content table td,.aw-content table th{border:1px solid var(--aw-border);padding:8px 12px;vertical-align:top;min-width:40px;background-clip:padding-box}.aw-content table th{background-color:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg));font-weight:600}.aw-content table td.aw-cell-selected,.aw-content table th.aw-cell-selected{outline:2px solid var(--aw-primary);outline-offset:-2px;background-color:color-mix(in srgb,var(--aw-primary) 18%,transparent)!important}.aeriz-wysiwyg-viewer .aw-cell-selected{outline:none;background-color:revert!important}.aw-content>figure,.aw-content>div.aw-youtube-embed{position:relative}.aw-block-align-controls{position:absolute;top:6px;left:6px;display:flex;gap:1px;background:#0000008c;border-radius:5px;padding:2px;z-index:11;opacity:0;transition:opacity .12s;-webkit-user-select:none;user-select:none}.aw-content>figure:hover .aw-block-align-controls,.aw-content>div.aw-youtube-embed:hover .aw-block-align-controls,.aw-resizing .aw-block-align-controls{opacity:1}.aw-block-align-btn{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:#fff;cursor:pointer;border-radius:3px;padding:0}.aw-block-align-btn:hover{background:#ffffff2e}.aw-block-align-btn svg{width:14px;height:14px}.aw-resize-handle{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;background:var(--aw-primary);border:2px solid var(--aw-bg);border-radius:3px;cursor:nwse-resize;z-index:10;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .12s,transform .08s}.aw-content>figure:hover .aw-resize-handle,.aw-content>div.aw-youtube-embed:hover .aw-resize-handle,.aw-resizing .aw-resize-handle{opacity:1}.aw-resize-handle:hover{transform:scale(1.15)}.aw-resizing{-webkit-user-select:none;user-select:none}.aeriz-wysiwyg-viewer .aw-resize-handle,.aeriz-wysiwyg-viewer .aw-block-align-controls{display:none!important}.aw-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background-color:var(--aw-toolbar-bg);border-bottom:1px solid var(--aw-border);color:var(--aw-toolbar-fg);z-index:var(--aw-z-toolbar)}.aw-toolbar-sticky{position:sticky;top:0}.aw-toolbar-group{display:flex;align-items:center;gap:1px;padding:0 4px;border-right:1px solid var(--aw-divider)}.aw-toolbar-group:last-child{border-right:none}.aw-toolbar-group:empty{display:none}.aw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;height:32px;min-width:32px;padding:0 6px;background:transparent;border:1px solid transparent;border-radius:var(--aw-radius-sm);cursor:pointer;color:var(--aw-toolbar-fg);transition:background-color .12s ease,color .12s ease,border-color .12s ease}.aw-toolbar-btn:hover:not(:disabled){background-color:var(--aw-btn-hover-bg)}.aw-toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.aw-toolbar-btn-active{background-color:var(--aw-btn-active-bg);color:var(--aw-btn-active-fg)}.aw-toolbar-btn-active:hover:not(:disabled){background-color:var(--aw-btn-active-bg)}.aw-toolbar-btn-icon{display:inline-flex;width:18px;height:18px}.aw-toolbar-btn-icon svg{width:100%;height:100%}.aw-toolbar-btn-chevron{display:inline-flex;width:12px;height:12px;margin-left:2px;opacity:.7}.aw-toolbar-btn-chevron svg{width:100%;height:100%}.aw-dialog-overlay,.aw-popover{--d-bg: #ffffff;--d-fg: #1a1a1a;--d-fg-muted: #6b7280;--d-border: #e5e7eb;--d-border-strong: #d1d5db;--d-input-bg: #ffffff;--d-input-fg: #1a1a1a;--d-footer-bg: #f9fafb;--d-hover-bg: #f3f4f6;--d-primary: #64c8ff;--d-primary-hover: #38bdf8;--d-primary-soft: rgba(100, 200, 255, .18);--d-on-primary: #050810;--d-overlay: rgba(0, 0, 0, .45);--d-mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace}.aw-dialog-overlay[data-theme=dark],.aw-popover[data-theme=dark]{--d-bg: #0a0e14;--d-fg: #e7eef5;--d-fg-muted: #76849b;--d-border: rgba(100, 200, 255, .16);--d-border-strong: rgba(100, 200, 255, .3);--d-input-bg: #0d1320;--d-input-fg: #e7eef5;--d-footer-bg: #05080d;--d-hover-bg: rgba(100, 200, 255, .1);--d-primary: #64c8ff;--d-primary-hover: #8ad6ff;--d-primary-soft: rgba(100, 200, 255, .22);--d-on-primary: #050810;--d-overlay: rgba(0, 0, 0, .65)}.aw-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--d-overlay);display:flex;align-items:center;justify-content:center;z-index:var(--aw-z-dialog, 1000);font-family:-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Pretendard,Noto Sans KR,Malgun Gothic,sans-serif;animation:aw-fade-in .12s ease}@keyframes aw-fade-in{0%{opacity:0}to{opacity:1}}.aw-dialog{background:var(--d-bg);color:var(--d-fg);border-radius:8px;box-shadow:0 25px 50px -12px #00000073;width:480px;max-width:95vw;max-height:85vh;display:flex;flex-direction:column;overflow:hidden;animation:aw-slide-up .18s ease;border:1px solid var(--d-border)}@keyframes aw-slide-up{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.aw-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--d-border)}.aw-dialog-title{margin:0;font-size:16px;font-weight:700;color:var(--d-fg)}.aw-dialog-close{background:transparent;border:none;cursor:pointer;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;color:var(--d-fg-muted);transition:background-color .12s,color .12s}.aw-dialog-close:hover{background-color:var(--d-hover-bg);color:var(--d-fg)}.aw-dialog-close svg{width:18px;height:18px}.aw-dialog-body{padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.aw-dialog-footer{padding:12px 20px;border-top:1px solid var(--d-border);display:flex;justify-content:flex-end;gap:8px;background-color:var(--d-footer-bg)}.aw-field{display:flex;flex-direction:column;gap:6px}.aw-field-label{font-size:13px;font-weight:600;color:var(--d-fg)}.aw-input{width:100%;padding:8px 12px;font-size:14px;font-family:inherit;border:1px solid var(--d-border-strong);border-radius:6px;outline:none;transition:border-color .12s,box-shadow .12s;color:var(--d-input-fg);background-color:var(--d-input-bg)}.aw-input:focus{border-color:var(--d-primary);box-shadow:0 0 0 3px var(--d-primary-soft)}.aw-textarea{resize:vertical;min-height:120px;font-family:var(--d-mono);font-size:12px;line-height:1.5}.aw-checkbox{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--d-fg);cursor:pointer;-webkit-user-select:none;user-select:none}.aw-checkbox input{width:16px;height:16px;accent-color:var(--d-primary)}.aw-btn{padding:8px 16px;font-size:14px;font-weight:600;border-radius:6px;border:1px solid transparent;cursor:pointer;font-family:inherit;transition:background-color .12s,border-color .12s,color .12s}.aw-btn-primary{background-color:var(--d-primary);color:var(--d-on-primary)}.aw-btn-primary:hover{background-color:var(--d-primary-hover)}.aw-btn-ghost{background-color:transparent;color:var(--d-fg);border-color:var(--d-border-strong)}.aw-btn-ghost:hover{background-color:var(--d-hover-bg)}.aw-tabs{display:flex;gap:4px;border-bottom:1px solid var(--d-border);margin:-4px -4px 8px}.aw-tab{padding:8px 14px;background:transparent;border:none;border-bottom:2px solid transparent;font-size:14px;font-family:inherit;font-weight:500;color:var(--d-fg-muted);cursor:pointer;transition:color .12s,border-color .12s}.aw-tab:hover{color:var(--d-fg)}.aw-tab-active{color:var(--d-primary);border-bottom-color:var(--d-primary)}.aw-tab-disabled,.aw-tab[disabled]{opacity:.4;cursor:not-allowed;text-decoration:line-through;color:var(--d-fg-muted)}.aw-tab-disabled:hover,.aw-tab[disabled]:hover{color:var(--d-fg-muted)}.aw-dialog-hint{font-size:12px;color:var(--d-fg-muted);margin-top:-4px}.aw-pane-notice{padding:24px 16px;text-align:center;font-size:13px;color:var(--d-fg-muted);background-color:var(--d-input-bg);border:1px dashed var(--d-border-strong);border-radius:8px}.aw-pane{display:flex;flex-direction:column;gap:12px}.aw-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:32px 20px;border:2px dashed var(--d-border-strong);border-radius:8px;cursor:pointer;text-align:center;color:var(--d-fg-muted);transition:border-color .12s,background-color .12s,color .12s;background-color:var(--d-input-bg)}.aw-dropzone:hover{border-color:var(--d-primary);background-color:var(--d-hover-bg);color:var(--d-primary)}.aw-dropzone svg{width:36px;height:36px}.aw-dropzone-text{font-size:13px;line-height:1.5}.aw-dropzone-loading{opacity:.6;pointer-events:none}.aw-preview{width:100%;height:160px;border-radius:6px;background-size:cover;background-position:center;border:1px solid var(--d-border)}.aw-table-grid{display:grid;grid-template-columns:repeat(10,22px);grid-template-rows:repeat(10,22px);gap:2px;padding:8px;background-color:var(--d-footer-bg);border-radius:6px;width:max-content;margin:0 auto}.aw-table-cell{background-color:var(--d-input-bg);border:1px solid var(--d-border-strong);border-radius:2px;cursor:pointer;transition:background-color .08s}.aw-table-cell-active{background-color:var(--d-primary-soft);border-color:var(--d-primary)}.aw-table-status{text-align:center;font-size:13px;color:var(--d-fg-muted);margin-top:4px}.aw-popover{background:var(--d-bg);color:var(--d-fg);border:1px solid var(--d-border);border-radius:8px;box-shadow:0 10px 25px -5px #00000059;padding:8px;z-index:var(--aw-z-popover, 100);animation:aw-fade-in .1s ease;min-width:160px;font-family:-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Pretendard,Noto Sans KR,Malgun Gothic,sans-serif}.aw-color-popover{width:max-content;min-width:220px}.aw-color-grid{display:grid;grid-template-columns:repeat(8,22px);gap:4px;justify-content:start}.aw-color-swatch{width:22px;height:22px;border-radius:4px;border:1px solid var(--d-border);cursor:pointer;padding:0;transition:transform .08s}.aw-color-swatch:hover{transform:scale(1.15)}.aw-color-section{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--d-fg-muted);font-weight:700;padding:6px 2px 4px}.aw-color-section+.aw-color-grid{margin-bottom:4px}.aw-popover-action{display:block;width:100%;text-align:left;padding:8px 10px;background:transparent;border:none;border-radius:4px;cursor:pointer;font-size:13px;color:var(--d-fg);font-family:inherit;margin-top:4px;position:relative}.aw-popover-action:hover{background-color:var(--d-hover-bg)}.aw-popover-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;color:var(--d-fg);font-family:inherit;font-size:12.5px}.aw-popover-item:hover{background-color:var(--d-hover-bg)}.aw-popover-item-glyph{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;flex-shrink:0;border-radius:3px;background:var(--d-hover-bg);color:var(--d-fg-muted);font-family:var(--d-mono);font-size:10px;font-weight:700}.aw-popover-item-glyph svg{width:11px;height:11px}.aw-popover-item-label{flex:1;min-width:0}.aw-popover-item-icon{display:inline-flex;width:auto;padding:8px;align-items:center;justify-content:center;gap:0}.aw-popover-item-icon svg{width:18px;height:18px}.aw-popover-divider{height:1px;background:var(--d-border);margin:4px 6px}.aw-block-type-popover{display:grid;grid-template-columns:repeat(2,minmax(150px,1fr));column-gap:2px;min-width:320px}.aw-block-type-popover .aw-popover-divider{grid-column:1 / -1}.aw-font-family-popover{min-width:180px;max-height:360px;overflow-y:auto}.aw-font-family-item{padding:4px 8px;display:flex;align-items:center;gap:8px}.aw-font-family-name{flex:1 1 auto;min-width:0;font-size:11px;line-height:1.4;color:var(--d-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aw-font-family-preview{flex:0 0 auto;font-size:13px;line-height:1.4;color:var(--d-fg-muted);letter-spacing:.05em}.aw-table-menu-popover{min-width:160px}.aw-table-menu-item{font-size:12px;padding:6px 10px}.aw-font-size-popover{min-width:80px;max-height:320px;overflow-y:auto}.aw-font-size-item{padding:2px 10px;justify-content:space-between}.aw-font-size-label{font-size:11px;color:var(--d-fg);font-family:var(--d-mono);letter-spacing:.02em}.aw-popover-item-active{background-color:color-mix(in srgb,var(--d-primary) 14%,transparent);color:var(--d-primary)}.aw-popover-item-active:after{content:"✓";margin-left:auto;font-size:11px}.aw-align-popover{display:flex;gap:2px;min-width:auto}.aw-table-popover{padding:10px;min-width:auto}.aw-table-picker-grid{display:grid;gap:2px;margin-bottom:6px}.aw-table-picker-grid .aw-table-cell{width:18px;height:18px;background-color:var(--d-input-bg);border:1px solid var(--d-border-strong);border-radius:2px;cursor:pointer;transition:background-color .06s,border-color .06s}.aw-table-picker-grid .aw-table-cell.aw-table-cell-active{background-color:var(--d-primary-soft);border-color:var(--d-primary)}.aw-table-popover .aw-table-status{text-align:center;font-size:12px;color:var(--d-fg-muted);font-family:var(--d-mono);margin:0}.aw-coming-soon-popover .aw-popover-section{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--d-fg-muted);padding:4px 8px;font-weight:700}.aw-coming-soon-popover .aw-popover-empty{padding:10px 8px;font-size:13px;color:var(--d-fg-muted)}
|
|
1
|
+
.aeriz-wysiwyg{--aw-bg: #ffffff;--aw-fg: #1a1a1a;--aw-fg-muted: #6b7280;--aw-border: #e5e7eb;--aw-toolbar-bg: #f9fafb;--aw-toolbar-fg: #374151;--aw-btn-hover-bg: #e5e7eb;--aw-btn-active-bg: #dbeafe;--aw-btn-active-fg: #1d4ed8;--aw-primary: #03c75a;--aw-primary-fg: #ffffff;--aw-primary-hover: #02b150;--aw-divider: #e5e7eb;--aw-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--aw-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--aw-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--aw-radius: 6px;--aw-radius-sm: 4px;--aw-font: -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Pretendard", "Noto Sans KR", "Malgun Gothic", sans-serif;--aw-font-mono: "SF Mono", Menlo, Monaco, Consolas, "D2Coding", monospace;--aw-toolbar-height: 44px;--aw-z-toolbar: 10;--aw-z-popover: 100;--aw-z-dialog: 1000}.aeriz-wysiwyg[data-theme=dark]{--aw-bg: #0a0e14;--aw-fg: #e7eef5;--aw-fg-muted: #6a7a8a;--aw-border: rgba(100, 200, 255, .12);--aw-toolbar-bg: #0d1320;--aw-toolbar-fg: #cfd6dd;--aw-btn-hover-bg: rgba(100, 200, 255, .06);--aw-btn-active-bg: rgba(100, 200, 255, .14);--aw-btn-active-fg: #64c8ff;--aw-primary: #64c8ff;--aw-primary-fg: #050810;--aw-primary-hover: #8ad6ff;--aw-divider: rgba(100, 200, 255, .12)}.aeriz-wysiwyg{font-family:var(--aw-font);background-color:var(--aw-bg);color:var(--aw-fg);border:1px solid var(--aw-border);border-radius:var(--aw-radius);overflow:hidden;display:flex;flex-direction:column;height:100%;min-height:320px;box-shadow:var(--aw-shadow-sm)}.aeriz-wysiwyg *,.aeriz-wysiwyg *:before,.aeriz-wysiwyg *:after{box-sizing:border-box}.aw-content-wrap{flex:1;min-height:0;overflow-y:auto;background-color:var(--aw-bg);position:relative}.aeriz-wysiwyg-viewer{height:auto;min-height:0}.aeriz-wysiwyg-viewer .aw-content-wrap{flex:0 0 auto;overflow:visible;min-height:0}.aeriz-wysiwyg-viewer .aw-content{min-height:0}.aw-block-handles{position:absolute;top:0;left:0;width:24px;height:100%;pointer-events:none;z-index:2}.aw-block-controls{position:absolute;left:4px;display:flex;flex-direction:column;gap:0;pointer-events:none;opacity:0;transition:opacity .12s ease}.aw-content-wrap:hover .aw-block-controls{opacity:.45}.aw-block-controls:hover{opacity:1}.aw-block-handle,.aw-block-add{width:18px;height:22px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid transparent;border-radius:3px;color:var(--aw-fg-muted);pointer-events:auto;-webkit-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;cursor:pointer;transition:color .12s,background-color .12s,border-color .12s}.aw-block-handle{cursor:grab}.aw-block-handle svg,.aw-block-add svg{width:12px;height:14px}.aw-block-handle:hover,.aw-block-add:hover{color:var(--aw-btn-active-fg, var(--aw-primary));background-color:var(--aw-btn-hover-bg);border-color:var(--aw-border)}.aw-block-handle.is-dragging{cursor:grabbing;color:var(--aw-primary)}.is-block-dragging{opacity:.4}.aw-block-drop-indicator{position:absolute;left:28px;right:28px;height:2px;background:var(--aw-primary);border-radius:1px;pointer-events:none;z-index:3;transform:translateY(-1px);box-shadow:0 0 6px var(--aw-primary)}.aw-status-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:5px 12px;border-top:1px solid var(--aw-border);background-color:var(--aw-toolbar-bg);color:var(--aw-fg-muted);font-family:var(--aw-font-mono);font-size:11px;letter-spacing:.02em;flex-shrink:0}.aw-status-left,.aw-status-right{display:inline-flex;align-items:center;gap:12px;min-width:0}.aw-status-item{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aw-status-item:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--aw-primary);opacity:.55;flex-shrink:0}.aw-status-action{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;background:transparent;border:1px solid transparent;color:var(--aw-fg-muted);padding:0;width:22px;height:22px;border-radius:3px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:color .12s,background-color .12s,border-color .12s}.aw-status-action svg{width:13px;height:13px}.aw-status-action:hover{color:var(--aw-btn-active-fg, var(--aw-primary));background-color:var(--aw-btn-hover-bg);border-color:var(--aw-border)}.aw-status-action:active{background-color:var(--aw-btn-active-bg)}.aeriz-wysiwyg-viewer .aw-status-bar{display:none}.aw-content>[data-block-id]{position:relative;transition:background-color .12s ease,box-shadow .12s ease}.aw-content>[data-block-focused]{background-color:color-mix(in srgb,var(--aw-primary) 8%,transparent);box-shadow:-3px 0 0 var(--aw-primary);border-radius:2px}.aw-block-label-pill{position:absolute;z-index:4;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:var(--aw-font-mono);font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--aw-primary);background:var(--aw-bg);padding:2px 6px;border:1px solid var(--aw-primary);border-radius:3px;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;gap:4px;line-height:1;transition:transform .12s ease,background-color .12s,color .12s,box-shadow .12s}.aw-block-label-pill:after{content:"▾";font-size:9px;opacity:.7}.aw-block-label-pill:hover{background:var(--aw-primary);color:var(--aw-bg);transform:translateY(-1px);box-shadow:0 2px 6px color-mix(in srgb,var(--aw-primary) 35%,transparent)}.aw-block-label-pill:active{transform:translateY(0)}.aw-content{outline:none;padding:24px 28px;min-height:240px;font-size:15px;line-height:1.7;color:var(--aw-fg);word-break:break-word}.aw-content:empty:before,.aw-content[data-placeholder]:has(p:only-child>br:only-child):before{content:attr(data-placeholder);color:var(--aw-fg-muted);pointer-events:none;position:absolute}.aw-content>p{margin:0 0 .8em}.aw-content>p:last-child{margin-bottom:0}.aw-content h1,.aw-content h2,.aw-content h3{font-weight:700;margin:.6em 0 .4em;padding-bottom:.25em;border-bottom:1px solid var(--aw-border)}.aw-content h1{font-size:1.875rem;line-height:1.3}.aw-content h2{font-size:1.5rem;line-height:1.35}.aw-content h3{font-size:1.25rem;line-height:1.4}.aw-content blockquote{margin:1em 0;padding:.5em 1em;border-left:4px solid var(--aw-primary);background-color:color-mix(in srgb,var(--aw-primary) 8%,transparent);color:var(--aw-fg);font-style:italic}.aw-content pre{position:relative;background-color:color-mix(in srgb,var(--aw-fg) 6%,var(--aw-bg));border:1px solid var(--aw-border);border-radius:var(--aw-radius-sm);padding:12px 16px;font-family:var(--aw-font-mono);font-size:13px;line-height:1.6;overflow-x:auto;margin:1em 0}.aw-content>pre>code[data-language]:not([data-language=""]):before{content:attr(data-language);position:absolute;top:6px;right:10px;font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--aw-fg-muted);background:color-mix(in srgb,var(--aw-fg) 10%,transparent);padding:2px 8px;border-radius:4px;pointer-events:none;-webkit-user-select:none;user-select:none}.aw-content code{font-family:var(--aw-font-mono);font-size:.9em;background-color:color-mix(in srgb,var(--aw-fg) 8%,transparent);padding:.15em .4em;border-radius:3px}.aw-content pre code{background:transparent;padding:0}.aw-content pre code .hl-keyword{color:#c678dd;font-weight:600}.aw-content pre code .hl-string{color:#98c379}.aw-content pre code .hl-number{color:#d19a66}.aw-content pre code .hl-comment{color:var(--aw-fg-muted);font-style:italic}.aw-content pre code .hl-fn{color:#61afef}.aw-content pre code .hl-builtin{color:#56b6c2}.aw-content pre code .hl-tag{color:#e06c75}.aw-content pre code .hl-attr{color:#d19a66}.aw-content pre code .hl-prop{color:#61afef}.aw-content pre code .hl-punct{color:var(--aw-fg-muted)}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-keyword{color:#a626a4}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-string{color:#50a14f}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-number{color:#986801}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-fn{color:#4078f2}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-builtin{color:#0184bc}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-tag{color:#e45649}.aeriz-wysiwyg[data-theme=light] .aw-content pre code .hl-prop{color:#4078f2}.aw-content ul,.aw-content ol{margin:.6em 0;padding-left:1.6em}.aw-content li{margin:.2em 0}.aw-content a{color:var(--aw-primary);text-decoration:underline}.aw-content img{max-width:100%;height:auto;border-radius:var(--aw-radius-sm);margin:.5em 0}.aw-content hr{border:none;border-top:1px solid var(--aw-border);margin:1.5em 0}.aw-content>div.aw-youtube-embed{position:relative;width:100%;aspect-ratio:16 / 9;margin:1em 0;border-radius:8px;background:#000;border:1px solid var(--aw-border)}.aw-content>div.aw-youtube-embed iframe{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;border:0;display:block}.aw-content>a.aw-file-attachment{display:flex;align-items:center;gap:12px;margin:1em 0;padding:10px 14px;border:1px solid var(--aw-border);border-radius:8px;background:var(--aw-bg);color:var(--aw-fg);text-decoration:none;transition:background-color .08s,border-color .08s;cursor:pointer;-webkit-user-select:none;user-select:none}.aw-content>a.aw-file-attachment:hover{background:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg));border-color:color-mix(in srgb,var(--aw-primary) 40%,var(--aw-border))}.aw-content>a.aw-file-attachment .aw-file-icon{flex:0 0 auto;display:inline-flex;width:36px;height:36px;align-items:center;justify-content:center;border-radius:6px;background:color-mix(in srgb,var(--aw-primary) 12%,transparent);color:var(--aw-primary)}.aw-content>a.aw-file-attachment .aw-file-icon svg{width:20px;height:20px}.aw-content>a.aw-file-attachment .aw-file-meta{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.aw-content>a.aw-file-attachment .aw-file-name{font-weight:600;font-size:.95rem;color:var(--aw-fg);word-break:break-all;line-height:1.3}.aw-content>a.aw-file-attachment .aw-file-info{font-size:.75rem;color:var(--aw-fg-muted);font-family:var(--aw-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);letter-spacing:.02em}.aw-content>a.aw-file-attachment .aw-file-action{flex:0 0 auto;display:inline-flex;width:32px;height:32px;align-items:center;justify-content:center;color:var(--aw-fg-muted)}.aw-content>a.aw-file-attachment .aw-file-action svg{width:18px;height:18px}.aw-content>a.aw-file-attachment:hover .aw-file-action{color:var(--aw-primary)}.aw-content>a.aw-link-card{display:flex;align-items:stretch;gap:14px;text-decoration:none;margin:1em 0;padding:0;border:1px solid var(--aw-border);border-radius:8px;background-color:color-mix(in srgb,var(--aw-primary) 5%,var(--aw-bg));color:var(--aw-fg);overflow:hidden;transition:border-color .12s,background-color .12s}.aw-content>a.aw-link-card:hover{border-color:var(--aw-primary);background-color:color-mix(in srgb,var(--aw-primary) 9%,var(--aw-bg))}.aw-content>a.aw-link-card>.aw-link-card-image{flex:0 0 auto;width:120px;height:auto;object-fit:cover;align-self:stretch;background:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg))}.aw-content>a.aw-link-card>.aw-link-card-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px;padding:12px 14px}.aw-content>a.aw-link-card .aw-link-card-title{font-weight:600;font-size:1rem;line-height:1.3;color:var(--aw-fg);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aw-content>a.aw-link-card .aw-link-card-desc{font-size:.85rem;line-height:1.4;color:var(--aw-fg-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aw-content>a.aw-link-card .aw-link-card-url{display:flex;align-items:center;gap:6px;margin-top:2px;font-size:.78rem;color:var(--aw-primary);font-family:var(--aw-font-mono);word-break:break-all}.aw-content>a.aw-link-card .aw-link-card-favicon{flex:0 0 auto;width:14px;height:14px;border-radius:2px;background:transparent}.aw-content>a.aw-link-card .aw-link-card-url-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aw-content table{border-collapse:collapse;width:100%;margin:1em 0}.aw-content table td,.aw-content table th{border:1px solid var(--aw-border);padding:8px 12px;vertical-align:top;min-width:40px;background-clip:padding-box}.aw-content table th{background-color:color-mix(in srgb,var(--aw-fg) 5%,var(--aw-bg));font-weight:600}.aw-content table td.aw-cell-selected,.aw-content table th.aw-cell-selected{outline:2px solid var(--aw-primary);outline-offset:-2px;background-color:color-mix(in srgb,var(--aw-primary) 18%,transparent)!important}.aeriz-wysiwyg-viewer .aw-cell-selected{outline:none;background-color:revert!important}.aw-content>figure,.aw-content>div.aw-youtube-embed{position:relative}.aw-block-align-controls{position:absolute;top:6px;left:6px;display:flex;gap:1px;background:#0000008c;border-radius:5px;padding:2px;z-index:11;opacity:0;transition:opacity .12s;-webkit-user-select:none;user-select:none}.aw-content>figure:hover .aw-block-align-controls,.aw-content>div.aw-youtube-embed:hover .aw-block-align-controls,.aw-resizing .aw-block-align-controls{opacity:1}.aw-block-align-btn{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;color:#fff;cursor:pointer;border-radius:3px;padding:0}.aw-block-align-btn:hover{background:#ffffff2e}.aw-block-align-btn svg{width:14px;height:14px}.aw-resize-handle{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;background:var(--aw-primary);border:2px solid var(--aw-bg);border-radius:3px;cursor:nwse-resize;z-index:10;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .12s,transform .08s}.aw-content>figure:hover .aw-resize-handle,.aw-content>div.aw-youtube-embed:hover .aw-resize-handle,.aw-resizing .aw-resize-handle{opacity:1}.aw-resize-handle:hover{transform:scale(1.15)}.aw-content>div.aw-youtube-embed>.aw-resize-handle{right:0;bottom:-15px}.aw-resizing{-webkit-user-select:none;user-select:none}.aeriz-wysiwyg-viewer .aw-resize-handle,.aeriz-wysiwyg-viewer .aw-block-align-controls{display:none!important}.aw-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background-color:var(--aw-toolbar-bg);border-bottom:1px solid var(--aw-border);color:var(--aw-toolbar-fg);z-index:var(--aw-z-toolbar)}.aw-toolbar-sticky{position:sticky;top:0}.aw-toolbar-group{display:flex;align-items:center;gap:1px;padding:0 4px;border-right:1px solid var(--aw-divider)}.aw-toolbar-group:last-child{border-right:none}.aw-toolbar-group:empty{display:none}.aw-toolbar-btn{display:inline-flex;align-items:center;justify-content:center;height:32px;min-width:32px;padding:0 6px;background:transparent;border:1px solid transparent;border-radius:var(--aw-radius-sm);cursor:pointer;color:var(--aw-toolbar-fg);transition:background-color .12s ease,color .12s ease,border-color .12s ease}.aw-toolbar-btn:hover:not(:disabled){background-color:var(--aw-btn-hover-bg)}.aw-toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.aw-toolbar-btn-active{background-color:var(--aw-btn-active-bg);color:var(--aw-btn-active-fg)}.aw-toolbar-btn-active:hover:not(:disabled){background-color:var(--aw-btn-active-bg)}.aw-toolbar-btn-icon{display:inline-flex;width:18px;height:18px}.aw-toolbar-btn-icon svg{width:100%;height:100%}.aw-toolbar-btn-chevron{display:inline-flex;width:12px;height:12px;margin-left:2px;opacity:.7}.aw-toolbar-btn-chevron svg{width:100%;height:100%}.aw-dialog-overlay,.aw-popover{--d-bg: #ffffff;--d-fg: #1a1a1a;--d-fg-muted: #6b7280;--d-border: #e5e7eb;--d-border-strong: #d1d5db;--d-input-bg: #ffffff;--d-input-fg: #1a1a1a;--d-footer-bg: #f9fafb;--d-hover-bg: #f3f4f6;--d-primary: #64c8ff;--d-primary-hover: #38bdf8;--d-primary-soft: rgba(100, 200, 255, .18);--d-on-primary: #050810;--d-overlay: rgba(0, 0, 0, .45);--d-mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace}.aw-dialog-overlay[data-theme=dark],.aw-popover[data-theme=dark]{--d-bg: #0a0e14;--d-fg: #e7eef5;--d-fg-muted: #76849b;--d-border: rgba(100, 200, 255, .16);--d-border-strong: rgba(100, 200, 255, .3);--d-input-bg: #0d1320;--d-input-fg: #e7eef5;--d-footer-bg: #05080d;--d-hover-bg: rgba(100, 200, 255, .1);--d-primary: #64c8ff;--d-primary-hover: #8ad6ff;--d-primary-soft: rgba(100, 200, 255, .22);--d-on-primary: #050810;--d-overlay: rgba(0, 0, 0, .65)}.aw-dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--d-overlay);display:flex;align-items:center;justify-content:center;z-index:var(--aw-z-dialog, 1000);font-family:-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Pretendard,Noto Sans KR,Malgun Gothic,sans-serif;animation:aw-fade-in .12s ease}@keyframes aw-fade-in{0%{opacity:0}to{opacity:1}}.aw-dialog{background:var(--d-bg);color:var(--d-fg);border-radius:8px;box-shadow:0 25px 50px -12px #00000073;width:480px;max-width:95vw;max-height:85vh;display:flex;flex-direction:column;overflow:hidden;animation:aw-slide-up .18s ease;border:1px solid var(--d-border)}@keyframes aw-slide-up{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}.aw-dialog-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--d-border)}.aw-dialog-title{margin:0;font-size:16px;font-weight:700;color:var(--d-fg)}.aw-dialog-close{background:transparent;border:none;cursor:pointer;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;color:var(--d-fg-muted);transition:background-color .12s,color .12s}.aw-dialog-close:hover{background-color:var(--d-hover-bg);color:var(--d-fg)}.aw-dialog-close svg{width:18px;height:18px}.aw-dialog-body{padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.aw-dialog-footer{padding:12px 20px;border-top:1px solid var(--d-border);display:flex;justify-content:flex-end;gap:8px;background-color:var(--d-footer-bg)}.aw-field{display:flex;flex-direction:column;gap:6px}.aw-field-label{font-size:13px;font-weight:600;color:var(--d-fg)}.aw-input{width:100%;padding:8px 12px;font-size:14px;font-family:inherit;border:1px solid var(--d-border-strong);border-radius:6px;outline:none;transition:border-color .12s,box-shadow .12s;color:var(--d-input-fg);background-color:var(--d-input-bg)}.aw-input:focus{border-color:var(--d-primary);box-shadow:0 0 0 3px var(--d-primary-soft)}.aw-textarea{resize:vertical;min-height:120px;font-family:var(--d-mono);font-size:12px;line-height:1.5}.aw-checkbox{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--d-fg);cursor:pointer;-webkit-user-select:none;user-select:none}.aw-checkbox input{width:16px;height:16px;accent-color:var(--d-primary)}.aw-btn{padding:8px 16px;font-size:14px;font-weight:600;border-radius:6px;border:1px solid transparent;cursor:pointer;font-family:inherit;transition:background-color .12s,border-color .12s,color .12s}.aw-btn-primary{background-color:var(--d-primary);color:var(--d-on-primary)}.aw-btn-primary:hover{background-color:var(--d-primary-hover)}.aw-btn-ghost{background-color:transparent;color:var(--d-fg);border-color:var(--d-border-strong)}.aw-btn-ghost:hover{background-color:var(--d-hover-bg)}.aw-tabs{display:flex;gap:4px;border-bottom:1px solid var(--d-border);margin:-4px -4px 8px}.aw-tab{padding:8px 14px;background:transparent;border:none;border-bottom:2px solid transparent;font-size:14px;font-family:inherit;font-weight:500;color:var(--d-fg-muted);cursor:pointer;transition:color .12s,border-color .12s}.aw-tab:hover{color:var(--d-fg)}.aw-tab-active{color:var(--d-primary);border-bottom-color:var(--d-primary)}.aw-tab-disabled,.aw-tab[disabled]{opacity:.4;cursor:not-allowed;text-decoration:line-through;color:var(--d-fg-muted)}.aw-tab-disabled:hover,.aw-tab[disabled]:hover{color:var(--d-fg-muted)}.aw-dialog-hint{font-size:12px;color:var(--d-fg-muted);margin-top:-4px}.aw-pane-notice{padding:24px 16px;text-align:center;font-size:13px;color:var(--d-fg-muted);background-color:var(--d-input-bg);border:1px dashed var(--d-border-strong);border-radius:8px}.aw-pane{display:flex;flex-direction:column;gap:12px}.aw-dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:32px 20px;border:2px dashed var(--d-border-strong);border-radius:8px;cursor:pointer;text-align:center;color:var(--d-fg-muted);transition:border-color .12s,background-color .12s,color .12s;background-color:var(--d-input-bg)}.aw-dropzone:hover{border-color:var(--d-primary);background-color:var(--d-hover-bg);color:var(--d-primary)}.aw-dropzone svg{width:36px;height:36px}.aw-dropzone-text{font-size:13px;line-height:1.5}.aw-dropzone-loading{opacity:.6;pointer-events:none}.aw-preview{width:100%;height:160px;border-radius:6px;background-size:cover;background-position:center;border:1px solid var(--d-border)}.aw-table-grid{display:grid;grid-template-columns:repeat(10,22px);grid-template-rows:repeat(10,22px);gap:2px;padding:8px;background-color:var(--d-footer-bg);border-radius:6px;width:max-content;margin:0 auto}.aw-table-cell{background-color:var(--d-input-bg);border:1px solid var(--d-border-strong);border-radius:2px;cursor:pointer;transition:background-color .08s}.aw-table-cell-active{background-color:var(--d-primary-soft);border-color:var(--d-primary)}.aw-table-status{text-align:center;font-size:13px;color:var(--d-fg-muted);margin-top:4px}.aw-popover{background:var(--d-bg);color:var(--d-fg);border:1px solid var(--d-border);border-radius:8px;box-shadow:0 10px 25px -5px #00000059;padding:8px;z-index:var(--aw-z-popover, 100);animation:aw-fade-in .1s ease;min-width:160px;font-family:-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Pretendard,Noto Sans KR,Malgun Gothic,sans-serif}.aw-color-popover{width:max-content;min-width:220px}.aw-color-grid{display:grid;grid-template-columns:repeat(8,22px);gap:4px;justify-content:start}.aw-color-swatch{width:22px;height:22px;border-radius:4px;border:1px solid var(--d-border);cursor:pointer;padding:0;transition:transform .08s}.aw-color-swatch:hover{transform:scale(1.15)}.aw-color-section{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--d-fg-muted);font-weight:700;padding:6px 2px 4px}.aw-color-section+.aw-color-grid{margin-bottom:4px}.aw-popover-action{display:block;width:100%;text-align:left;padding:8px 10px;background:transparent;border:none;border-radius:4px;cursor:pointer;font-size:13px;color:var(--d-fg);font-family:inherit;margin-top:4px;position:relative}.aw-popover-action:hover{background-color:var(--d-hover-bg)}.aw-popover-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;color:var(--d-fg);font-family:inherit;font-size:12.5px}.aw-popover-item:hover{background-color:var(--d-hover-bg)}.aw-popover-item-glyph{display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;flex-shrink:0;border-radius:3px;background:var(--d-hover-bg);color:var(--d-fg-muted);font-family:var(--d-mono);font-size:10px;font-weight:700}.aw-popover-item-glyph svg{width:11px;height:11px}.aw-popover-item-label{flex:1;min-width:0}.aw-popover-item-icon{display:inline-flex;width:auto;padding:8px;align-items:center;justify-content:center;gap:0}.aw-popover-item-icon svg{width:18px;height:18px}.aw-popover-divider{height:1px;background:var(--d-border);margin:4px 6px}.aw-block-type-popover{display:grid;grid-template-columns:repeat(2,minmax(150px,1fr));column-gap:2px;min-width:320px}.aw-block-type-popover .aw-popover-divider{grid-column:1 / -1}.aw-font-family-popover{min-width:180px;max-height:360px;overflow-y:auto}.aw-font-family-item{padding:4px 8px;display:flex;align-items:center;gap:8px}.aw-font-family-name{flex:1 1 auto;min-width:0;font-size:11px;line-height:1.4;color:var(--d-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.aw-font-family-preview{flex:0 0 auto;font-size:13px;line-height:1.4;color:var(--d-fg-muted);letter-spacing:.05em}.aw-table-menu-popover{min-width:160px}.aw-table-menu-item{font-size:12px;padding:6px 10px}.aw-font-size-popover{min-width:80px;max-height:320px;overflow-y:auto}.aw-font-size-item{padding:2px 10px;justify-content:space-between}.aw-font-size-label{font-size:11px;color:var(--d-fg);font-family:var(--d-mono);letter-spacing:.02em}.aw-popover-item-active{background-color:color-mix(in srgb,var(--d-primary) 14%,transparent);color:var(--d-primary)}.aw-popover-item-active:after{content:"✓";margin-left:auto;font-size:11px}.aw-align-popover{display:flex;gap:2px;min-width:auto}.aw-table-popover{padding:10px;min-width:auto}.aw-table-picker-grid{display:grid;gap:2px;margin-bottom:6px}.aw-table-picker-grid .aw-table-cell{width:18px;height:18px;background-color:var(--d-input-bg);border:1px solid var(--d-border-strong);border-radius:2px;cursor:pointer;transition:background-color .06s,border-color .06s}.aw-table-picker-grid .aw-table-cell.aw-table-cell-active{background-color:var(--d-primary-soft);border-color:var(--d-primary)}.aw-table-popover .aw-table-status{text-align:center;font-size:12px;color:var(--d-fg-muted);font-family:var(--d-mono);margin:0}.aw-coming-soon-popover .aw-popover-section{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--d-fg-muted);padding:4px 8px;font-weight:700}.aw-coming-soon-popover .aw-popover-empty{padding:10px 8px;font-size:13px;color:var(--d-fg-muted)}
|