@templatical/editor 0.6.4 → 0.6.6
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/{AccessibilityPanel-CvQGLdu6.js → AccessibilityPanel-B2MT0M58.js} +34 -34
- package/dist/{AiChatSidebar-B3SJIKG_.js → AiChatSidebar-w5ek3Z76.js} +62 -62
- package/dist/{AiFeatureMenu-BLLKoOos.js → AiFeatureMenu-ChlAWywJ.js} +20 -20
- package/dist/{BlockA11yBadge-CXDLqkcJ.js → BlockA11yBadge-C0S6kPC4.js} +12 -12
- package/dist/{CloudEditor-nzrRhHIi.js → CloudEditor-DYYaScFe.js} +441 -441
- package/dist/{CollaboratorBar-DuPYW5iF.js → CollaboratorBar-Bo8vtPId.js} +20 -20
- package/dist/CommentsSidebar-BQROg36f.js +441 -0
- package/dist/{cdn/chunks/CountdownBlock-5YdT1uUu.js → CountdownBlock-Bxqe7zwL.js} +21 -22
- package/dist/CountdownToolbar-CpFAnjSo.js +210 -0
- package/dist/{DesignReferenceSidebar-B8V_F2yF.js → DesignReferenceSidebar-CfqpcWX6.js} +52 -52
- package/dist/{LoadingTrack-B0CWFHXQ.js → LoadingTrack-CFkDkjBb.js} +1 -1
- package/dist/{ModuleBrowserModal-DrUFMTDx.js → ModuleBrowserModal-CKhsaPnA.js} +79 -79
- package/dist/{ModulePreviewCanvas-CHdOwV_4.js → ModulePreviewCanvas-Cw9GeGus.js} +29 -29
- package/dist/{NumberWithSuffix-DkXUez9t.js → NumberWithSuffix-Dw8dN1Pt.js} +88 -88
- package/dist/{ParagraphEditor-D75wl3BX.js → ParagraphEditor-DjDiUzmv.js} +218 -218
- package/dist/{RichTextEditorContent-DYkIauIk.js → RichTextEditorContent-CK3Om7ES.js} +38 -38
- package/dist/{SaveModuleDialog-FZ9lxY7_.js → SaveModuleDialog-CSUPmfRP.js} +34 -34
- package/dist/{SnapshotHistory-BR3eV120.js → SnapshotHistory-DwX2fj6N.js} +33 -33
- package/dist/{TemplateScoringPanel-4GTNHej5.js → TemplateScoringPanel-BIAeCAEP.js} +82 -82
- package/dist/{TestEmailModal--ue5w9fT.js → TestEmailModal-CIlBvWWn.js} +30 -30
- package/dist/{TitleEditor-fStSADI-.js → TitleEditor-BCV5k6wj.js} +67 -67
- package/dist/{TplModal-BwSfxIHf.js → TplModal-C3Hq9b58.js} +14 -14
- package/dist/{accessibility-e8JYu_zd.js → accessibility-BgUEA-Ai.js} +1 -1
- package/dist/{blockTypeIcons-BcTrDjmH.js → blockTypeIcons-iUurP50H.js} +2 -2
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{AccessibilityPanel-B6DOjojm.js → AccessibilityPanel-AQD2ygU6.js} +34 -34
- package/dist/cdn/chunks/{AccessibilityPanel-B6DOjojm.js.map → AccessibilityPanel-AQD2ygU6.js.map} +1 -1
- package/dist/cdn/chunks/{AiFeatureMenu-qEdB2fZJ.js → AiFeatureMenu-CDh9ifC8.js} +16 -16
- package/dist/cdn/chunks/{AiFeatureMenu-qEdB2fZJ.js.map → AiFeatureMenu-CDh9ifC8.js.map} +1 -1
- package/dist/cdn/chunks/{BlockA11yBadge-DcEZftf6.js → BlockA11yBadge-BxZr3s7T.js} +10 -10
- package/dist/cdn/chunks/{BlockA11yBadge-DcEZftf6.js.map → BlockA11yBadge-BxZr3s7T.js.map} +1 -1
- package/dist/cdn/chunks/{CloudEditor-dwzWDF_n.js → CloudEditor-Fg7pQ9IQ.js} +425 -425
- package/dist/cdn/chunks/{CloudEditor-dwzWDF_n.js.map → CloudEditor-Fg7pQ9IQ.js.map} +1 -1
- package/dist/cdn/chunks/{CollaboratorBar--nO7TX6b.js → CollaboratorBar-B5a8eBXN.js} +20 -20
- package/dist/cdn/chunks/{CollaboratorBar--nO7TX6b.js.map → CollaboratorBar-B5a8eBXN.js.map} +1 -1
- package/dist/cdn/chunks/CountdownBlock-BeHkO19t.js +93 -0
- package/dist/cdn/chunks/{CountdownBlock-5YdT1uUu.js.map → CountdownBlock-BeHkO19t.js.map} +1 -1
- package/dist/cdn/chunks/CountdownToolbar-8UfW0jb1.js +212 -0
- package/dist/cdn/chunks/{CountdownToolbar-DXPXrbAA.js.map → CountdownToolbar-8UfW0jb1.js.map} +1 -1
- package/dist/cdn/chunks/{ModuleBrowserModal-DxoPp81s.js → ModuleBrowserModal-BMUyAmmj.js} +43 -43
- package/dist/cdn/chunks/{ModuleBrowserModal-DxoPp81s.js.map → ModuleBrowserModal-BMUyAmmj.js.map} +1 -1
- package/dist/cdn/chunks/{ModulePreviewCanvas-CoLdb4ar.js → ModulePreviewCanvas-CxSc7Pvd.js} +23 -23
- package/dist/cdn/chunks/{ModulePreviewCanvas-CoLdb4ar.js.map → ModulePreviewCanvas-CxSc7Pvd.js.map} +1 -1
- package/dist/cdn/chunks/{NumberWithSuffix-CE3NrZhH.js → NumberWithSuffix-BSOUOUCL.js} +108 -108
- package/dist/cdn/chunks/{NumberWithSuffix-CE3NrZhH.js.map → NumberWithSuffix-BSOUOUCL.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-B6Ygu-Mq.js → ParagraphEditor-S1bpgxe5.js} +187 -187
- package/dist/cdn/chunks/{ParagraphEditor-B6Ygu-Mq.js.map → ParagraphEditor-S1bpgxe5.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-DL_y2SrR.js → RichTextEditorContent-ByehRfEA.js} +33 -33
- package/dist/cdn/chunks/{RichTextEditorContent-DL_y2SrR.js.map → RichTextEditorContent-ByehRfEA.js.map} +1 -1
- package/dist/cdn/chunks/{SaveModuleDialog-B0TnO_o9.js → SaveModuleDialog-5CNMvgYL.js} +27 -27
- package/dist/cdn/chunks/{SaveModuleDialog-B0TnO_o9.js.map → SaveModuleDialog-5CNMvgYL.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-BHpfxvwy.js → TitleEditor-BASWPsCM.js} +66 -66
- package/dist/cdn/chunks/{TitleEditor-BHpfxvwy.js.map → TitleEditor-BASWPsCM.js.map} +1 -1
- package/dist/cdn/chunks/{blockTypeIcons-BzzY9_kA.js → blockTypeIcons-DfOffaYP.js} +3 -3
- package/dist/cdn/chunks/{blockTypeIcons-BzzY9_kA.js.map → blockTypeIcons-DfOffaYP.js.map} +1 -1
- package/dist/cdn/chunks/draggable-CNhyCGIO.js +4804 -0
- package/dist/cdn/chunks/draggable-CNhyCGIO.js.map +1 -0
- package/dist/cdn/chunks/{extensions-DIxF31tA.js → extensions-BJOV1jre.js} +95 -95
- package/dist/cdn/chunks/{extensions-DIxF31tA.js.map → extensions-BJOV1jre.js.map} +1 -1
- package/dist/cdn/chunks/{features-DEMb13KS.js → features-D6FoOm8v.js} +2272 -2269
- package/dist/cdn/chunks/features-D6FoOm8v.js.map +1 -0
- package/dist/cdn/chunks/{icons-CsLTcirh.js → icons-CpsjWPU-.js} +2 -2
- package/dist/cdn/chunks/{icons-CsLTcirh.js.map → icons-CpsjWPU-.js.map} +1 -1
- package/dist/cdn/chunks/{media-library-CVaNvhpM.js → media-library-CEd7Lqxk.js} +1397 -1397
- package/dist/cdn/chunks/{media-library-CVaNvhpM.js.map → media-library-CEd7Lqxk.js.map} +1 -1
- package/dist/cdn/chunks/{pusher-CDbNlZBE.js → pusher-bjpcqCZG.js} +2 -2
- package/dist/cdn/chunks/{pusher-CDbNlZBE.js.map → pusher-bjpcqCZG.js.map} +1 -1
- package/dist/cdn/chunks/{quality-BaBfc54_.js → quality-Bx1oORXQ.js} +3 -3
- package/dist/cdn/chunks/{quality-BaBfc54_.js.map → quality-Bx1oORXQ.js.map} +1 -1
- package/dist/cdn/chunks/{renderer-CUxvx7ro.js → renderer-CwxCisa-.js} +3 -3
- package/dist/cdn/chunks/{renderer-CUxvx7ro.js.map → renderer-CwxCisa-.js.map} +1 -1
- package/dist/{rolldown-runtime-BZGGJVDF.js → cdn/chunks/rolldown-runtime-C266TIVP.js} +5 -5
- package/dist/cdn/chunks/{src-CRaqN-p8.js → src-DDSInEkE.js} +171 -171
- package/dist/cdn/chunks/{src-CRaqN-p8.js.map → src-DDSInEkE.js.map} +1 -1
- package/dist/cdn/chunks/styles-B1uu-Cc9.js +2944 -0
- package/dist/cdn/chunks/styles-B1uu-Cc9.js.map +1 -0
- package/dist/cdn/chunks/{tiptap-ZhwKyFp7.js → tiptap-IyIsncxY.js} +45 -46
- package/dist/cdn/chunks/{tiptap-ZhwKyFp7.js.map → tiptap-IyIsncxY.js.map} +1 -1
- package/dist/cdn/editor.css +1 -1
- package/dist/cdn/editor.js +122 -122
- package/dist/cdn/editor.js.map +1 -1
- package/dist/{check-Da05j8yl.js → check-Bg5yrRmX.js} +1 -1
- package/dist/{chevron-down-R2uY34iD.js → chevron-down-tee-ghFi.js} +1 -1
- package/dist/{circle-alert-DZuGWPX-.js → circle-alert-C0L9pUQ4.js} +1 -1
- package/dist/{clock-CRp2sIub.js → clock-CDlEdqiP.js} +1 -1
- package/dist/{cloud-DEk_b4CR.js → cloud-a3VovHva.js} +145 -145
- package/dist/{createLucideIcon-C3pa2siy.js → createLucideIcon-Di4mqmGn.js} +9 -9
- package/dist/{dist-B1IR0bpH.js → dist-BzRLLpfq.js} +107 -107
- package/dist/{dist-BFawx6IS.js → dist-Pk4MhWMP.js} +35 -35
- package/dist/{extensions-CUcl9Ok4.js → extensions-BF39Siqk.js} +103 -103
- package/dist/{image-up-MBZKKg9p.js → image-up-1D_3XDdO.js} +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/{info-CJEC7piy.js → info-DTGrc0Bx.js} +1 -1
- package/dist/{keys-ciNfSSGj.js → keys-Bqs_0du9.js} +1 -1
- package/dist/{loader-circle-DsY5Yg33.js → loader-circle-_9bP23op.js} +1 -1
- package/dist/{message-circle-yElBbR2C.js → message-circle-gzy2ZGJ3.js} +1 -1
- package/dist/{refresh-cw-CE_AGtn8.js → refresh-cw-BNAhAmtL.js} +1 -1
- package/dist/rolldown-runtime-CAFD8bLK.js +11 -0
- package/dist/{scan-line-D0vcUekt.js → scan-line-DUEg6DoT.js} +1 -1
- package/dist/{send-DH4oDQqC.js → send-BatIZC9a.js} +1 -1
- package/dist/{shield-check-CfJgs2Hd.js → shield-check-C5Gv2cM1.js} +1 -1
- package/dist/{sparkles-CvRXGqFs.js → sparkles-D1IGi_cC.js} +1 -1
- package/dist/style.css +1 -1
- package/dist/styles-BgmKdc2x.js +3173 -0
- package/dist/templatical-editor.js +99 -99
- package/dist/{text-align-start-BT9VUDxK.js → text-align-start-DG3aAH7Y.js} +1 -1
- package/dist/{trash-2-DbP2Y6t2.js → trash-2-424iqbpN.js} +1 -1
- package/dist/{triangle-alert-aOXceTSe.js → triangle-alert-DWQySIE2.js} +1 -1
- package/dist/{useCloudI18n-BuIwR6OE.js → useCloudI18n-CL_AwWwi.js} +4 -4
- package/dist/useEditorCore-CnXrv71D.js +3794 -0
- package/dist/{useI18n-lb2DHDiu.js → useI18n-CgmQftNf.js} +4 -4
- package/dist/{useMergeTag-CBwKnnNB.js → useMergeTag-vpwrZ9eQ.js} +3 -3
- package/dist/vue.runtime.esm-bundler-Bxqkjqhc.js +4300 -0
- package/dist/{x-u2oVmjN_.js → x-Dlaenqta.js} +1 -1
- package/package.json +8 -8
- package/dist/CommentsSidebar-B1pvJdqF.js +0 -441
- package/dist/CountdownBlock-BNSj1jvJ.js +0 -92
- package/dist/CountdownToolbar-ClJr2GzL.js +0 -210
- package/dist/cdn/chunks/CountdownToolbar-DXPXrbAA.js +0 -212
- package/dist/cdn/chunks/draggable-Bcb86AsV.js +0 -11572
- package/dist/cdn/chunks/draggable-Bcb86AsV.js.map +0 -1
- package/dist/cdn/chunks/features-DEMb13KS.js.map +0 -1
- package/dist/cdn/chunks/rolldown-runtime-BNuo_Jkg.js +0 -20
- package/dist/cdn/chunks/styles-BHJULjNR.js +0 -2947
- package/dist/cdn/chunks/styles-BHJULjNR.js.map +0 -1
- package/dist/styles-DEXEkBvg.js +0 -3176
- package/dist/useEditorCore-C6ost42Q.js +0 -9342
- package/dist/vue.runtime.esm-bundler-DpvJL-nX.js +0 -5775
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { w as g } from "./useEditorCore-
|
|
3
|
-
import { D as _ } from "./keys-
|
|
1
|
+
import { A as e, N as t, X as n, b as r, c as i, d as a, f as o, h as s, m as c, p as l, rt as u, t as d, u as f, v as p, w as m, z as h } from "./vue.runtime.esm-bundler-Bxqkjqhc.js";
|
|
2
|
+
import { w as g } from "./useEditorCore-CnXrv71D.js";
|
|
3
|
+
import { D as _ } from "./keys-Bqs_0du9.js";
|
|
4
4
|
//#region src/cloud/components/TplModal.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var v = ["data-tpl-theme"], y = /* @__PURE__ */
|
|
5
|
+
var v = ["data-tpl-theme"], y = /* @__PURE__ */ r({
|
|
6
6
|
__name: "TplModal",
|
|
7
7
|
props: { visible: { type: Boolean } },
|
|
8
8
|
emits: ["close", "keydown"],
|
|
9
|
-
setup(
|
|
10
|
-
let b =
|
|
11
|
-
g(S,
|
|
12
|
-
let C =
|
|
9
|
+
setup(r, { emit: y }) {
|
|
10
|
+
let b = r, x = y, S = n(null);
|
|
11
|
+
g(S, a(() => b.visible));
|
|
12
|
+
let C = m(_);
|
|
13
13
|
function w(e) {
|
|
14
14
|
e.key === "Escape" && x("close"), x("keydown", e);
|
|
15
15
|
}
|
|
16
|
-
return (
|
|
16
|
+
return (n, a) => (e(), l(f, { to: "body" }, [p(d, {
|
|
17
17
|
"enter-active-class": "tpl:transition tpl:duration-150",
|
|
18
18
|
"enter-from-class": "tpl:opacity-0",
|
|
19
19
|
"enter-to-class": "tpl:opacity-100",
|
|
@@ -21,21 +21,21 @@ var v = ["data-tpl-theme"], y = /* @__PURE__ */ i({
|
|
|
21
21
|
"leave-from-class": "tpl:opacity-100",
|
|
22
22
|
"leave-to-class": "tpl:opacity-0"
|
|
23
23
|
}, {
|
|
24
|
-
default:
|
|
24
|
+
default: h(() => [r.visible ? (e(), s("div", {
|
|
25
25
|
key: 0,
|
|
26
|
-
"data-tpl-theme":
|
|
26
|
+
"data-tpl-theme": u(C),
|
|
27
27
|
class: "tpl tpl:fixed tpl:inset-0 tpl:z-modal tpl:flex tpl:items-center tpl:justify-center",
|
|
28
28
|
style: {
|
|
29
29
|
"background-color": "var(--tpl-overlay)",
|
|
30
30
|
"backdrop-filter": "blur(8px)",
|
|
31
31
|
"-webkit-backdrop-filter": "blur(8px)"
|
|
32
32
|
},
|
|
33
|
-
onClick:
|
|
33
|
+
onClick: a[0] ||= i((e) => x("close"), ["self"]),
|
|
34
34
|
onKeydown: w
|
|
35
|
-
}, [
|
|
35
|
+
}, [o("div", {
|
|
36
36
|
ref_key: "dialogRef",
|
|
37
37
|
ref: S
|
|
38
|
-
}, [t(
|
|
38
|
+
}, [t(n.$slots, "default")], 512)], 40, v)) : c("", !0)]),
|
|
39
39
|
_: 3
|
|
40
40
|
})]));
|
|
41
41
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as e, E as t, M as n, O as r, k as i } from "./useEditorCore-
|
|
2
|
-
import { t as a } from "./createLucideIcon-
|
|
1
|
+
import { D as e, E as t, M as n, O as r, k as i } from "./useEditorCore-CnXrv71D.js";
|
|
2
|
+
import { t as a } from "./createLucideIcon-Di4mqmGn.js";
|
|
3
3
|
var o = a("columns-3", [
|
|
4
4
|
["rect", {
|
|
5
5
|
width: "18",
|
package/dist/bundle-stats.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.6.
|
|
3
|
-
"initialGzipBytes":
|
|
4
|
-
"initialRawBytes":
|
|
2
|
+
"version": "0.6.6",
|
|
3
|
+
"initialGzipBytes": 139160,
|
|
4
|
+
"initialRawBytes": 469203,
|
|
5
5
|
"initialFileCount": 33,
|
|
6
|
-
"lazyGzipBytes":
|
|
7
|
-
"lazyRawBytes":
|
|
6
|
+
"lazyGzipBytes": 255718,
|
|
7
|
+
"lazyRawBytes": 891628,
|
|
8
8
|
"lazyFileCount": 45,
|
|
9
|
-
"generatedAt": "2026-05-
|
|
9
|
+
"generatedAt": "2026-05-11T15:07:13.400Z"
|
|
10
10
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Kt as g, Nt as _, Pt as v, Tt as y, _t as b, at as x } from "./features-
|
|
3
|
-
import { Q as S, Z as C, t as w } from "./icons-
|
|
1
|
+
import { L as e, M as t, P as n, T as r, at as i, f as a, g as o, h as s, m as c, p as l, rt as u, st as d, u as f, v as p, x as m, y as h } from "./draggable-CNhyCGIO.js";
|
|
2
|
+
import { Kt as g, Nt as _, Pt as v, Tt as y, _t as b, at as x } from "./features-D6FoOm8v.js";
|
|
3
|
+
import { Q as S, Z as C, t as w } from "./icons-CpsjWPU-.js";
|
|
4
4
|
//#region src/components/sidebar/AccessibilityPanel.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var T = { class: "tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4" }, E = { class: "tpl:flex tpl:items-center tpl:gap-2" }, D = { class: "tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, O = ["title"], k = {
|
|
6
6
|
key: 0,
|
|
@@ -11,87 +11,87 @@ var T = { class: "tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4" }, E = { class: "tpl:
|
|
|
11
11
|
}, j = { class: "tpl:ml-auto tpl:font-normal tpl:opacity-70" }, M = {
|
|
12
12
|
key: 1,
|
|
13
13
|
class: "tpl:m-0 tpl:mb-3 tpl:flex tpl:list-none tpl:flex-col tpl:gap-2 tpl:p-0"
|
|
14
|
-
}, N = { class: "tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]" }, P = { class: "tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, F = { class: "tpl:flex tpl:gap-1.5" }, I = ["onClick"], L = ["title", "onClick"], R = /* @__PURE__ */
|
|
14
|
+
}, N = { class: "tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]" }, P = { class: "tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]" }, F = { class: "tpl:flex tpl:gap-1.5" }, I = ["onClick"], L = ["title", "onClick"], R = /* @__PURE__ */ m({
|
|
15
15
|
__name: "AccessibilityPanel",
|
|
16
|
-
setup(
|
|
17
|
-
let { t: R, format: z } = _(), B =
|
|
16
|
+
setup(m) {
|
|
17
|
+
let { t: R, format: z } = _(), B = r(v, null), V = r(g, null), H = a(() => (B?.issues.value ?? []).filter((e) => e.severity === "error")), U = a(() => (B?.issues.value ?? []).filter((e) => e.severity === "warning")), W = a(() => (B?.issues.value ?? []).filter((e) => e.severity === "info")), G = a(() => H.value.length + U.value.length + W.value.length);
|
|
18
18
|
function K(e) {
|
|
19
19
|
V && e.blockId && V.selectBlock(e.blockId);
|
|
20
20
|
}
|
|
21
21
|
function q(e) {
|
|
22
22
|
B?.applyFix(e);
|
|
23
23
|
}
|
|
24
|
-
return (
|
|
25
|
-
|
|
24
|
+
return (r, a) => (t(), o("div", T, [l("header", E, [
|
|
25
|
+
h(u(S), {
|
|
26
26
|
size: 16,
|
|
27
27
|
"stroke-width": 1.5
|
|
28
28
|
}),
|
|
29
|
-
|
|
30
|
-
G.value > 0 ? (
|
|
29
|
+
l("h3", D, d(u(R).accessibility.panelTitle), 1),
|
|
30
|
+
G.value > 0 ? (t(), o("span", {
|
|
31
31
|
key: 0,
|
|
32
32
|
class: "tpl:ml-auto tpl:rounded-full tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-0.5 tpl:text-[11px] tpl:text-[var(--tpl-text-muted)]",
|
|
33
|
-
title:
|
|
34
|
-
}, d(G.value), 9, O)) :
|
|
35
|
-
]), !
|
|
33
|
+
title: u(z)(u(R).accessibility.issueCountTooltip, { count: G.value })
|
|
34
|
+
}, d(G.value), 9, O)) : s("", !0)
|
|
35
|
+
]), !u(B) || u(B).unavailable.value ? (t(), o("div", k)) : G.value === 0 ? (t(), o("div", A, d(u(R).accessibility.emptyState), 1)) : (t(!0), o(f, { key: 2 }, n([
|
|
36
36
|
{
|
|
37
37
|
key: "errors",
|
|
38
|
-
title:
|
|
39
|
-
icon:
|
|
38
|
+
title: u(R).accessibility.groupErrors,
|
|
39
|
+
icon: u(y),
|
|
40
40
|
items: H.value,
|
|
41
41
|
tone: "tpl:text-[var(--tpl-danger)]"
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
key: "warnings",
|
|
45
|
-
title:
|
|
46
|
-
icon:
|
|
45
|
+
title: u(R).accessibility.groupWarnings,
|
|
46
|
+
icon: u(x),
|
|
47
47
|
items: U.value,
|
|
48
48
|
tone: "tpl:text-[var(--tpl-warning)]"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
key: "info",
|
|
52
|
-
title:
|
|
53
|
-
icon:
|
|
52
|
+
title: u(R).accessibility.groupInfo,
|
|
53
|
+
icon: u(b),
|
|
54
54
|
items: W.value,
|
|
55
55
|
tone: "tpl:text-[var(--tpl-text-muted)]"
|
|
56
56
|
}
|
|
57
|
-
], (
|
|
57
|
+
], (r) => (t(), o("section", { key: r.key }, [r.items.length > 0 ? (t(), o("header", {
|
|
58
58
|
key: 0,
|
|
59
|
-
class:
|
|
59
|
+
class: i(["tpl:mb-2 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-[11px] tpl:font-semibold tpl:uppercase tpl:tracking-wide", r.tone])
|
|
60
60
|
}, [
|
|
61
|
-
(
|
|
61
|
+
(t(), c(e(r.icon), {
|
|
62
62
|
size: 12,
|
|
63
63
|
"stroke-width": 2
|
|
64
64
|
})),
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
], 2)) :
|
|
65
|
+
p(" " + d(r.title) + " ", 1),
|
|
66
|
+
l("span", j, d(r.items.length), 1)
|
|
67
|
+
], 2)) : s("", !0), r.items.length > 0 ? (t(), o("ul", M, [(t(!0), o(f, null, n(r.items, (e) => (t(), o("li", {
|
|
68
68
|
key: `${e.ruleId}-${e.blockId ?? "template"}`,
|
|
69
69
|
class: "tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3"
|
|
70
70
|
}, [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
l("p", N, d(e.message), 1),
|
|
72
|
+
l("p", P, d(e.ruleId), 1),
|
|
73
|
+
l("div", F, [e.blockId ? (t(), o("button", {
|
|
74
74
|
key: 0,
|
|
75
75
|
type: "button",
|
|
76
76
|
class: "tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text)]",
|
|
77
77
|
onClick: (t) => K(e)
|
|
78
|
-
}, [
|
|
78
|
+
}, [h(u(C), {
|
|
79
79
|
size: 10,
|
|
80
80
|
"stroke-width": 2
|
|
81
|
-
}),
|
|
81
|
+
}), p(" " + d(u(R).accessibility.jump), 1)], 8, I)) : s("", !0), e.fix ? (t(), o("button", {
|
|
82
82
|
key: 1,
|
|
83
83
|
type: "button",
|
|
84
84
|
class: "tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:bg-[var(--tpl-primary)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-white",
|
|
85
85
|
title: e.fix.description,
|
|
86
86
|
onClick: (t) => q(e)
|
|
87
|
-
}, [
|
|
87
|
+
}, [h(u(w), {
|
|
88
88
|
size: 10,
|
|
89
89
|
"stroke-width": 2
|
|
90
|
-
}),
|
|
91
|
-
]))), 128))])) :
|
|
90
|
+
}), p(" " + d(u(R).accessibility.fix), 1)], 8, L)) : s("", !0)])
|
|
91
|
+
]))), 128))])) : s("", !0)]))), 128))]));
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
//#endregion
|
|
95
95
|
export { R as default };
|
|
96
96
|
|
|
97
|
-
//# sourceMappingURL=AccessibilityPanel-
|
|
97
|
+
//# sourceMappingURL=AccessibilityPanel-AQD2ygU6.js.map
|
package/dist/cdn/chunks/{AccessibilityPanel-B6DOjojm.js.map → AccessibilityPanel-AQD2ygU6.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessibilityPanel-B6DOjojm.js","names":[],"sources":["../../../src/components/sidebar/AccessibilityPanel.vue","../../../src/components/sidebar/AccessibilityPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport {\n Accessibility,\n AlertCircle,\n AlertTriangle,\n Info,\n ArrowRight,\n Wrench,\n} from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY, EDITOR_KEY } from \"../../keys\";\nimport type { A11yIssue } from \"../../composables/useAccessibilityLint\";\n\nconst { t, format } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\nconst editor = inject(EDITOR_KEY, null);\n\nconst errors = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"error\"),\n);\nconst warnings = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"warning\"),\n);\nconst infos = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"info\"),\n);\n\nconst totalCount = computed(\n () => errors.value.length + warnings.value.length + infos.value.length,\n);\n\nfunction jumpTo(issue: A11yIssue): void {\n if (!editor) return;\n if (issue.blockId) editor.selectBlock(issue.blockId);\n}\n\nfunction applyFix(issue: A11yIssue): void {\n lint?.applyFix(issue);\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4\">\n <header class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <Accessibility :size=\"16\" :stroke-width=\"1.5\" />\n <h3\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.accessibility.panelTitle }}\n </h3>\n <span\n v-if=\"totalCount > 0\"\n class=\"tpl:ml-auto tpl:rounded-full tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-0.5 tpl:text-[11px] tpl:text-[var(--tpl-text-muted)]\"\n :title=\"\n format(t.accessibility.issueCountTooltip, { count: totalCount })\n \"\n >\n {{ totalCount }}\n </span>\n </header>\n\n <div\n v-if=\"!lint || lint.unavailable.value\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <!-- Quality package not available; render nothing visible beyond a hint. -->\n </div>\n\n <div\n v-else-if=\"totalCount === 0\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3 tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.accessibility.emptyState }}\n </div>\n\n <template v-else>\n <section\n v-for=\"group in [\n {\n key: 'errors',\n title: t.accessibility.groupErrors,\n icon: AlertCircle,\n items: errors,\n tone: 'tpl:text-[var(--tpl-danger)]',\n },\n {\n key: 'warnings',\n title: t.accessibility.groupWarnings,\n icon: AlertTriangle,\n items: warnings,\n tone: 'tpl:text-[var(--tpl-warning)]',\n },\n {\n key: 'info',\n title: t.accessibility.groupInfo,\n icon: Info,\n items: infos,\n tone: 'tpl:text-[var(--tpl-text-muted)]',\n },\n ]\"\n :key=\"group.key\"\n >\n <header\n v-if=\"group.items.length > 0\"\n class=\"tpl:mb-2 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-[11px] tpl:font-semibold tpl:uppercase tpl:tracking-wide\"\n :class=\"group.tone\"\n >\n <component :is=\"group.icon\" :size=\"12\" :stroke-width=\"2\" />\n {{ group.title }}\n <span class=\"tpl:ml-auto tpl:font-normal tpl:opacity-70\">\n {{ group.items.length }}\n </span>\n </header>\n <ul\n v-if=\"group.items.length > 0\"\n class=\"tpl:m-0 tpl:mb-3 tpl:flex tpl:list-none tpl:flex-col tpl:gap-2 tpl:p-0\"\n >\n <li\n v-for=\"issue in group.items\"\n :key=\"`${issue.ruleId}-${issue.blockId ?? 'template'}`\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3\"\n >\n <p class=\"tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]\">\n {{ issue.message }}\n </p>\n <p\n class=\"tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ issue.ruleId }}\n </p>\n <div class=\"tpl:flex tpl:gap-1.5\">\n <button\n v-if=\"issue.blockId\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text)]\"\n @click=\"jumpTo(issue)\"\n >\n <ArrowRight :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.jump }}\n </button>\n <button\n v-if=\"issue.fix\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:bg-[var(--tpl-primary)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-white\"\n :title=\"issue.fix.description\"\n @click=\"applyFix(issue)\"\n >\n <Wrench :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.fix }}\n </button>\n </div>\n </li>\n </ul>\n </section>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport {\n Accessibility,\n AlertCircle,\n AlertTriangle,\n Info,\n ArrowRight,\n Wrench,\n} from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY, EDITOR_KEY } from \"../../keys\";\nimport type { A11yIssue } from \"../../composables/useAccessibilityLint\";\n\nconst { t, format } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\nconst editor = inject(EDITOR_KEY, null);\n\nconst errors = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"error\"),\n);\nconst warnings = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"warning\"),\n);\nconst infos = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"info\"),\n);\n\nconst totalCount = computed(\n () => errors.value.length + warnings.value.length + infos.value.length,\n);\n\nfunction jumpTo(issue: A11yIssue): void {\n if (!editor) return;\n if (issue.blockId) editor.selectBlock(issue.blockId);\n}\n\nfunction applyFix(issue: A11yIssue): void {\n lint?.applyFix(issue);\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4\">\n <header class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <Accessibility :size=\"16\" :stroke-width=\"1.5\" />\n <h3\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.accessibility.panelTitle }}\n </h3>\n <span\n v-if=\"totalCount > 0\"\n class=\"tpl:ml-auto tpl:rounded-full tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-0.5 tpl:text-[11px] tpl:text-[var(--tpl-text-muted)]\"\n :title=\"\n format(t.accessibility.issueCountTooltip, { count: totalCount })\n \"\n >\n {{ totalCount }}\n </span>\n </header>\n\n <div\n v-if=\"!lint || lint.unavailable.value\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <!-- Quality package not available; render nothing visible beyond a hint. -->\n </div>\n\n <div\n v-else-if=\"totalCount === 0\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3 tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.accessibility.emptyState }}\n </div>\n\n <template v-else>\n <section\n v-for=\"group in [\n {\n key: 'errors',\n title: t.accessibility.groupErrors,\n icon: AlertCircle,\n items: errors,\n tone: 'tpl:text-[var(--tpl-danger)]',\n },\n {\n key: 'warnings',\n title: t.accessibility.groupWarnings,\n icon: AlertTriangle,\n items: warnings,\n tone: 'tpl:text-[var(--tpl-warning)]',\n },\n {\n key: 'info',\n title: t.accessibility.groupInfo,\n icon: Info,\n items: infos,\n tone: 'tpl:text-[var(--tpl-text-muted)]',\n },\n ]\"\n :key=\"group.key\"\n >\n <header\n v-if=\"group.items.length > 0\"\n class=\"tpl:mb-2 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-[11px] tpl:font-semibold tpl:uppercase tpl:tracking-wide\"\n :class=\"group.tone\"\n >\n <component :is=\"group.icon\" :size=\"12\" :stroke-width=\"2\" />\n {{ group.title }}\n <span class=\"tpl:ml-auto tpl:font-normal tpl:opacity-70\">\n {{ group.items.length }}\n </span>\n </header>\n <ul\n v-if=\"group.items.length > 0\"\n class=\"tpl:m-0 tpl:mb-3 tpl:flex tpl:list-none tpl:flex-col tpl:gap-2 tpl:p-0\"\n >\n <li\n v-for=\"issue in group.items\"\n :key=\"`${issue.ruleId}-${issue.blockId ?? 'template'}`\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3\"\n >\n <p class=\"tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]\">\n {{ issue.message }}\n </p>\n <p\n class=\"tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ issue.ruleId }}\n </p>\n <div class=\"tpl:flex tpl:gap-1.5\">\n <button\n v-if=\"issue.blockId\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text)]\"\n @click=\"jumpTo(issue)\"\n >\n <ArrowRight :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.jump }}\n </button>\n <button\n v-if=\"issue.fix\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:bg-[var(--tpl-primary)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-white\"\n :title=\"issue.fix.description\"\n @click=\"applyFix(issue)\"\n >\n <Wrench :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.fix }}\n </button>\n </div>\n </li>\n </ul>\n </section>\n </template>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AccessibilityPanel-AQD2ygU6.js","names":[],"sources":["../../../src/components/sidebar/AccessibilityPanel.vue","../../../src/components/sidebar/AccessibilityPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport {\n Accessibility,\n AlertCircle,\n AlertTriangle,\n Info,\n ArrowRight,\n Wrench,\n} from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY, EDITOR_KEY } from \"../../keys\";\nimport type { A11yIssue } from \"../../composables/useAccessibilityLint\";\n\nconst { t, format } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\nconst editor = inject(EDITOR_KEY, null);\n\nconst errors = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"error\"),\n);\nconst warnings = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"warning\"),\n);\nconst infos = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"info\"),\n);\n\nconst totalCount = computed(\n () => errors.value.length + warnings.value.length + infos.value.length,\n);\n\nfunction jumpTo(issue: A11yIssue): void {\n if (!editor) return;\n if (issue.blockId) editor.selectBlock(issue.blockId);\n}\n\nfunction applyFix(issue: A11yIssue): void {\n lint?.applyFix(issue);\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4\">\n <header class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <Accessibility :size=\"16\" :stroke-width=\"1.5\" />\n <h3\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.accessibility.panelTitle }}\n </h3>\n <span\n v-if=\"totalCount > 0\"\n class=\"tpl:ml-auto tpl:rounded-full tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-0.5 tpl:text-[11px] tpl:text-[var(--tpl-text-muted)]\"\n :title=\"\n format(t.accessibility.issueCountTooltip, { count: totalCount })\n \"\n >\n {{ totalCount }}\n </span>\n </header>\n\n <div\n v-if=\"!lint || lint.unavailable.value\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <!-- Quality package not available; render nothing visible beyond a hint. -->\n </div>\n\n <div\n v-else-if=\"totalCount === 0\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3 tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.accessibility.emptyState }}\n </div>\n\n <template v-else>\n <section\n v-for=\"group in [\n {\n key: 'errors',\n title: t.accessibility.groupErrors,\n icon: AlertCircle,\n items: errors,\n tone: 'tpl:text-[var(--tpl-danger)]',\n },\n {\n key: 'warnings',\n title: t.accessibility.groupWarnings,\n icon: AlertTriangle,\n items: warnings,\n tone: 'tpl:text-[var(--tpl-warning)]',\n },\n {\n key: 'info',\n title: t.accessibility.groupInfo,\n icon: Info,\n items: infos,\n tone: 'tpl:text-[var(--tpl-text-muted)]',\n },\n ]\"\n :key=\"group.key\"\n >\n <header\n v-if=\"group.items.length > 0\"\n class=\"tpl:mb-2 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-[11px] tpl:font-semibold tpl:uppercase tpl:tracking-wide\"\n :class=\"group.tone\"\n >\n <component :is=\"group.icon\" :size=\"12\" :stroke-width=\"2\" />\n {{ group.title }}\n <span class=\"tpl:ml-auto tpl:font-normal tpl:opacity-70\">\n {{ group.items.length }}\n </span>\n </header>\n <ul\n v-if=\"group.items.length > 0\"\n class=\"tpl:m-0 tpl:mb-3 tpl:flex tpl:list-none tpl:flex-col tpl:gap-2 tpl:p-0\"\n >\n <li\n v-for=\"issue in group.items\"\n :key=\"`${issue.ruleId}-${issue.blockId ?? 'template'}`\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3\"\n >\n <p class=\"tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]\">\n {{ issue.message }}\n </p>\n <p\n class=\"tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ issue.ruleId }}\n </p>\n <div class=\"tpl:flex tpl:gap-1.5\">\n <button\n v-if=\"issue.blockId\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text)]\"\n @click=\"jumpTo(issue)\"\n >\n <ArrowRight :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.jump }}\n </button>\n <button\n v-if=\"issue.fix\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:bg-[var(--tpl-primary)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-white\"\n :title=\"issue.fix.description\"\n @click=\"applyFix(issue)\"\n >\n <Wrench :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.fix }}\n </button>\n </div>\n </li>\n </ul>\n </section>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport {\n Accessibility,\n AlertCircle,\n AlertTriangle,\n Info,\n ArrowRight,\n Wrench,\n} from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY, EDITOR_KEY } from \"../../keys\";\nimport type { A11yIssue } from \"../../composables/useAccessibilityLint\";\n\nconst { t, format } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\nconst editor = inject(EDITOR_KEY, null);\n\nconst errors = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"error\"),\n);\nconst warnings = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"warning\"),\n);\nconst infos = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.severity === \"info\"),\n);\n\nconst totalCount = computed(\n () => errors.value.length + warnings.value.length + infos.value.length,\n);\n\nfunction jumpTo(issue: A11yIssue): void {\n if (!editor) return;\n if (issue.blockId) editor.selectBlock(issue.blockId);\n}\n\nfunction applyFix(issue: A11yIssue): void {\n lint?.applyFix(issue);\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:flex-col tpl:gap-4 tpl:p-4\">\n <header class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <Accessibility :size=\"16\" :stroke-width=\"1.5\" />\n <h3\n class=\"tpl:m-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.accessibility.panelTitle }}\n </h3>\n <span\n v-if=\"totalCount > 0\"\n class=\"tpl:ml-auto tpl:rounded-full tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-0.5 tpl:text-[11px] tpl:text-[var(--tpl-text-muted)]\"\n :title=\"\n format(t.accessibility.issueCountTooltip, { count: totalCount })\n \"\n >\n {{ totalCount }}\n </span>\n </header>\n\n <div\n v-if=\"!lint || lint.unavailable.value\"\n class=\"tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n <!-- Quality package not available; render nothing visible beyond a hint. -->\n </div>\n\n <div\n v-else-if=\"totalCount === 0\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3 tpl:text-xs tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.accessibility.emptyState }}\n </div>\n\n <template v-else>\n <section\n v-for=\"group in [\n {\n key: 'errors',\n title: t.accessibility.groupErrors,\n icon: AlertCircle,\n items: errors,\n tone: 'tpl:text-[var(--tpl-danger)]',\n },\n {\n key: 'warnings',\n title: t.accessibility.groupWarnings,\n icon: AlertTriangle,\n items: warnings,\n tone: 'tpl:text-[var(--tpl-warning)]',\n },\n {\n key: 'info',\n title: t.accessibility.groupInfo,\n icon: Info,\n items: infos,\n tone: 'tpl:text-[var(--tpl-text-muted)]',\n },\n ]\"\n :key=\"group.key\"\n >\n <header\n v-if=\"group.items.length > 0\"\n class=\"tpl:mb-2 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-[11px] tpl:font-semibold tpl:uppercase tpl:tracking-wide\"\n :class=\"group.tone\"\n >\n <component :is=\"group.icon\" :size=\"12\" :stroke-width=\"2\" />\n {{ group.title }}\n <span class=\"tpl:ml-auto tpl:font-normal tpl:opacity-70\">\n {{ group.items.length }}\n </span>\n </header>\n <ul\n v-if=\"group.items.length > 0\"\n class=\"tpl:m-0 tpl:mb-3 tpl:flex tpl:list-none tpl:flex-col tpl:gap-2 tpl:p-0\"\n >\n <li\n v-for=\"issue in group.items\"\n :key=\"`${issue.ruleId}-${issue.blockId ?? 'template'}`\"\n class=\"tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3\"\n >\n <p class=\"tpl:m-0 tpl:mb-2 tpl:text-xs tpl:text-[var(--tpl-text)]\">\n {{ issue.message }}\n </p>\n <p\n class=\"tpl:m-0 tpl:mb-2 tpl:font-mono tpl:text-[10px] tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ issue.ruleId }}\n </p>\n <div class=\"tpl:flex tpl:gap-1.5\">\n <button\n v-if=\"issue.blockId\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg-hover)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-[var(--tpl-text)]\"\n @click=\"jumpTo(issue)\"\n >\n <ArrowRight :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.jump }}\n </button>\n <button\n v-if=\"issue.fix\"\n type=\"button\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:rounded-md tpl:bg-[var(--tpl-primary)] tpl:px-2 tpl:py-1 tpl:text-[11px] tpl:font-medium tpl:text-white\"\n :title=\"issue.fix.description\"\n @click=\"applyFix(issue)\"\n >\n <Wrench :size=\"10\" :stroke-width=\"2\" />\n {{ t.accessibility.fix }}\n </button>\n </div>\n </li>\n </ul>\n </section>\n </template>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { $ as d, Ft as f, ct as p, en as m, lt as h, tt as g, yt as _ } from "./features-
|
|
1
|
+
import { L as e, M as t, P as n, f as r, g as i, m as a, ot as o, p as s, st as c, u as l, x as u } from "./draggable-CNhyCGIO.js";
|
|
2
|
+
import { $ as d, Ft as f, ct as p, en as m, lt as h, tt as g, yt as _ } from "./features-D6FoOm8v.js";
|
|
3
3
|
//#region src/cloud/components/AiFeatureMenu.vue?vue&type=script&setup=true&lang.ts
|
|
4
4
|
var v = {
|
|
5
5
|
class: "tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]",
|
|
@@ -7,11 +7,11 @@ var v = {
|
|
|
7
7
|
"backdrop-filter": "blur(8px)",
|
|
8
8
|
"-webkit-backdrop-filter": "blur(8px)"
|
|
9
9
|
}
|
|
10
|
-
}, y = ["onClick"], b = { class: "tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5" }, x = { class: "tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]" }, S = { class: "tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]" }, C = /* @__PURE__ */ g(/* @__PURE__ */
|
|
10
|
+
}, y = ["onClick"], b = { class: "tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5" }, x = { class: "tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]" }, S = { class: "tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]" }, C = /* @__PURE__ */ g(/* @__PURE__ */ u({
|
|
11
11
|
__name: "AiFeatureMenu",
|
|
12
12
|
props: { activeFeature: {} },
|
|
13
13
|
emits: ["select"],
|
|
14
|
-
setup(
|
|
14
|
+
setup(u, { emit: g }) {
|
|
15
15
|
let C = g, { t: w } = d(), T = m(f, "AiFeatureMenu"), E = {
|
|
16
16
|
"ai-chat": "chat",
|
|
17
17
|
"design-reference": "designToTemplate",
|
|
@@ -29,31 +29,31 @@ var v = {
|
|
|
29
29
|
key: "scoring",
|
|
30
30
|
icon: h
|
|
31
31
|
}
|
|
32
|
-
], O =
|
|
32
|
+
], O = r(() => D.filter((e) => T.isFeatureEnabled(E[e.key])));
|
|
33
33
|
function k(e) {
|
|
34
34
|
return e === "ai-chat" ? w.aiMenu.aiAssistant : e === "design-reference" ? w.aiMenu.designToTemplate : w.aiMenu.templateScore;
|
|
35
35
|
}
|
|
36
36
|
function A(e) {
|
|
37
37
|
return e === "ai-chat" ? w.aiMenu.aiAssistantDesc : e === "design-reference" ? w.aiMenu.designToTemplateDesc : w.aiMenu.templateScoreDesc;
|
|
38
38
|
}
|
|
39
|
-
return (
|
|
40
|
-
key:
|
|
39
|
+
return (r, d) => (t(), i("div", v, [(t(!0), i(l, null, n(O.value, (n) => (t(), i("button", {
|
|
40
|
+
key: n.key,
|
|
41
41
|
class: "tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100",
|
|
42
|
-
style:
|
|
43
|
-
onClick: (
|
|
44
|
-
}, [
|
|
42
|
+
style: o({ backgroundColor: u.activeFeature === n.key ? "var(--tpl-primary-light)" : "transparent" }),
|
|
43
|
+
onClick: (e) => C("select", n.key)
|
|
44
|
+
}, [s("div", {
|
|
45
45
|
class: "tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]",
|
|
46
|
-
style:
|
|
47
|
-
backgroundColor:
|
|
48
|
-
color:
|
|
46
|
+
style: o({
|
|
47
|
+
backgroundColor: u.activeFeature === n.key ? "var(--tpl-primary)" : "var(--tpl-bg-active)",
|
|
48
|
+
color: u.activeFeature === n.key ? "var(--tpl-bg)" : "var(--tpl-text-muted)"
|
|
49
49
|
})
|
|
50
|
-
}, [(t(),
|
|
50
|
+
}, [(t(), a(e(n.icon), {
|
|
51
51
|
size: 15,
|
|
52
52
|
"stroke-width": 2
|
|
53
|
-
}))], 4),
|
|
53
|
+
}))], 4), s("div", b, [s("span", x, c(k(n.key)), 1), s("span", S, c(A(n.key)), 1)])], 12, y))), 128))]));
|
|
54
54
|
}
|
|
55
55
|
}), [["__scopeId", "data-v-07839fa3"]]);
|
|
56
56
|
//#endregion
|
|
57
57
|
export { C as default };
|
|
58
58
|
|
|
59
|
-
//# sourceMappingURL=AiFeatureMenu-
|
|
59
|
+
//# sourceMappingURL=AiFeatureMenu-CDh9ifC8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiFeatureMenu-
|
|
1
|
+
{"version":3,"file":"AiFeatureMenu-CDh9ifC8.js","names":[],"sources":["../../../src/cloud/components/AiFeatureMenu.vue","../../../src/cloud/components/AiFeatureMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useCloudI18nStrict } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t: cloudT } = useCloudI18nStrict();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return cloudT.aiMenu.aiAssistant;\n if (key === \"design-reference\") return cloudT.aiMenu.designToTemplate;\n return cloudT.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return cloudT.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return cloudT.aiMenu.designToTemplateDesc;\n return cloudT.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useCloudI18nStrict } from \"../../composables\";\nimport { AI_CONFIG_KEY, requireInject } from \"../../keys\";\nimport type { AiConfig } from \"@templatical/types\";\nimport { ImageUp, ShieldCheck, Sparkles } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nexport type AiFeature = \"ai-chat\" | \"design-reference\" | \"scoring\";\n\ndefineProps<{\n activeFeature: AiFeature | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", feature: AiFeature): void;\n}>();\n\nconst { t: cloudT } = useCloudI18nStrict();\n\nconst aiConfig = requireInject(AI_CONFIG_KEY, \"AiFeatureMenu\");\n\nconst configKeyMap: Record<AiFeature, keyof AiConfig> = {\n \"ai-chat\": \"chat\",\n \"design-reference\": \"designToTemplate\",\n scoring: \"scoring\",\n};\n\nconst allFeatures: { key: AiFeature; icon: typeof Sparkles }[] = [\n { key: \"ai-chat\", icon: Sparkles },\n { key: \"design-reference\", icon: ImageUp },\n { key: \"scoring\", icon: ShieldCheck },\n];\n\nconst features = computed(() =>\n allFeatures.filter((f) => aiConfig.isFeatureEnabled(configKeyMap[f.key])),\n);\n\nfunction getTitle(key: AiFeature): string {\n if (key === \"ai-chat\") return cloudT.aiMenu.aiAssistant;\n if (key === \"design-reference\") return cloudT.aiMenu.designToTemplate;\n return cloudT.aiMenu.templateScore;\n}\n\nfunction getDescription(key: AiFeature): string {\n if (key === \"ai-chat\") return cloudT.aiMenu.aiAssistantDesc;\n if (key === \"design-reference\") return cloudT.aiMenu.designToTemplateDesc;\n return cloudT.aiMenu.templateScoreDesc;\n}\n</script>\n\n<template>\n <div\n class=\"tpl-ai-feature-menu tpl:w-[280px] tpl:overflow-hidden tpl:rounded-[var(--tpl-radius)] tpl:py-1 tpl:bg-[var(--tpl-bg-elevated)] tpl:border tpl:border-[var(--tpl-border)] tpl:shadow-[var(--tpl-shadow-lg)]\"\n style=\"backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px)\"\n >\n <button\n v-for=\"feature in features\"\n :key=\"feature.key\"\n class=\"tpl-ai-feature-menu-item tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-start tpl:gap-3 tpl:border-none tpl:px-3 tpl:py-2.5 tpl:text-left tpl:transition-colors tpl:duration-100\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary-light)'\n : 'transparent',\n }\"\n @click=\"emit('select', feature.key)\"\n >\n <div\n class=\"tpl:mt-0.5 tpl:flex tpl:size-7 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-sm)]\"\n :style=\"{\n backgroundColor:\n activeFeature === feature.key\n ? 'var(--tpl-primary)'\n : 'var(--tpl-bg-active)',\n color:\n activeFeature === feature.key\n ? 'var(--tpl-bg)'\n : 'var(--tpl-text-muted)',\n }\"\n >\n <component :is=\"feature.icon\" :size=\"15\" :stroke-width=\"2\" />\n </div>\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-col tpl:gap-0.5\">\n <span class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text)]\">\n {{ getTitle(feature.key) }}\n </span>\n <span\n class=\"tpl:text-xs tpl:leading-snug tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ getDescription(feature.key) }}\n </span>\n </div>\n </button>\n </div>\n</template>\n\n<style scoped>\n.tpl-ai-feature-menu-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAaA,IAAM,IAAO,GAIP,EAAE,GAAG,MAAW,GAAoB,EAEpC,IAAW,EAAc,GAAe,gBAAgB,EAExD,IAAkD;GACtD,WAAW;GACX,oBAAoB;GACpB,SAAS;GACV,EAEK,IAA2D;GAC/D;IAAE,KAAK;IAAW,MAAM;IAAU;GAClC;IAAE,KAAK;IAAoB,MAAM;IAAS;GAC1C;IAAE,KAAK;IAAW,MAAM;IAAa;GACtC,EAEK,IAAW,QACf,EAAY,QAAQ,MAAM,EAAS,iBAAiB,EAAa,EAAE,KAAK,CAAC,CAC1E;EAED,SAAS,EAAS,GAAwB;AAGxC,UAFI,MAAQ,YAAkB,EAAO,OAAO,cACxC,MAAQ,qBAA2B,EAAO,OAAO,mBAC9C,EAAO,OAAO;;EAGvB,SAAS,EAAe,GAAwB;AAG9C,UAFI,MAAQ,YAAkB,EAAO,OAAO,kBACxC,MAAQ,qBAA2B,EAAO,OAAO,uBAC9C,EAAO,OAAO;;yBAKrB,EA0CM,OA1CN,GA0CM,EAAA,EAAA,GAAA,EAtCJ,EAqCS,GAAA,MAAA,EApCW,EAAA,QAAX,YADT,EAqCS,UAAA;GAnCN,KAAK,EAAQ;GACd,OAAM;GACL,OAAK,EAAA,EAAA,iBAAuC,EAAA,kBAAkB,EAAQ,MAAA,6BAAA,eAAA,CAAA;GAMtE,UAAK,MAAE,EAAI,UAAW,EAAQ,IAAG;MAElC,EAcM,OAAA;GAbJ,OAAM;GACL,OAAK,EAAA;qBAA2C,EAAA,kBAAkB,EAAQ,MAAA,uBAAA;WAA8G,EAAA,kBAAkB,EAAQ,MAAA,kBAAA;;YAWnN,EAA6D,EAA7C,EAAQ,KAAI,EAAA;GAAG,MAAM;GAAK,gBAAc;YAE1D,EASM,OATN,GASM,CARJ,EAEO,QAFP,GAEO,EADF,EAAS,EAAQ,IAAG,CAAA,EAAA,EAAA,EAEzB,EAIO,QAJP,GAIO,EADF,EAAe,EAAQ,IAAG,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Nt as l, Pt as u, Tt as d, at as f } from "./features-
|
|
1
|
+
import { M as e, T as t, at as n, f as r, g as i, h as a, m as o, rt as s, x as c } from "./draggable-CNhyCGIO.js";
|
|
2
|
+
import { Nt as l, Pt as u, Tt as d, at as f } from "./features-D6FoOm8v.js";
|
|
3
3
|
//#region src/components/canvas/BlockA11yBadge.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
-
var p = ["title", "aria-label"], m = /* @__PURE__ */
|
|
4
|
+
var p = ["title", "aria-label"], m = /* @__PURE__ */ c({
|
|
5
5
|
__name: "BlockA11yBadge",
|
|
6
6
|
props: { blockId: {} },
|
|
7
|
-
setup(
|
|
8
|
-
let m =
|
|
9
|
-
return (
|
|
7
|
+
setup(c) {
|
|
8
|
+
let m = c, { t: h } = l(), g = t(u, null), _ = r(() => (g?.issues.value ?? []).filter((e) => e.blockId === m.blockId)), v = r(() => _.value.some((e) => e.severity === "error") ? "error" : _.value.some((e) => e.severity === "warning") ? "warning" : null), y = r(() => v.value === "error" ? h.accessibility.badgeError : h.accessibility.badgeWarning);
|
|
9
|
+
return (t, r) => v.value ? (e(), i("span", {
|
|
10
10
|
key: 0,
|
|
11
|
-
class:
|
|
11
|
+
class: n(["tpl:absolute tpl:top-1 tpl:right-1 tpl:z-10 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-sm)] tpl:ring-1 tpl:ring-[var(--tpl-border)]", v.value === "error" ? "tpl:text-[var(--tpl-danger)]" : "tpl:text-[var(--tpl-warning)]"]),
|
|
12
12
|
title: y.value,
|
|
13
13
|
"aria-label": y.value,
|
|
14
14
|
role: "img"
|
|
15
|
-
}, [v.value === "error" ? (
|
|
15
|
+
}, [v.value === "error" ? (e(), o(s(d), {
|
|
16
16
|
key: 0,
|
|
17
17
|
size: 14,
|
|
18
18
|
"stroke-width": 2.25,
|
|
19
19
|
fill: "currentColor",
|
|
20
20
|
stroke: "var(--tpl-bg)"
|
|
21
|
-
})) : (
|
|
21
|
+
})) : (e(), o(s(f), {
|
|
22
22
|
key: 1,
|
|
23
23
|
size: 14,
|
|
24
24
|
"stroke-width": 2.25,
|
|
@@ -30,4 +30,4 @@ var p = ["title", "aria-label"], m = /* @__PURE__ */ n({
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { m as default };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=BlockA11yBadge-
|
|
33
|
+
//# sourceMappingURL=BlockA11yBadge-BxZr3s7T.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockA11yBadge-
|
|
1
|
+
{"version":3,"file":"BlockA11yBadge-BxZr3s7T.js","names":[],"sources":["../../../src/components/canvas/BlockA11yBadge.vue","../../../src/components/canvas/BlockA11yBadge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport { CircleAlert, TriangleAlert } from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY } from \"../../keys\";\n\nconst props = defineProps<{ blockId: string }>();\nconst { t } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\n\nconst blockIssues = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.blockId === props.blockId),\n);\n\nconst severity = computed<\"error\" | \"warning\" | null>(() => {\n if (blockIssues.value.some((i) => i.severity === \"error\")) return \"error\";\n if (blockIssues.value.some((i) => i.severity === \"warning\")) return \"warning\";\n return null;\n});\n\nconst tooltip = computed(() =>\n severity.value === \"error\"\n ? t.accessibility.badgeError\n : t.accessibility.badgeWarning,\n);\n</script>\n\n<template>\n <span\n v-if=\"severity\"\n class=\"tpl:absolute tpl:top-1 tpl:right-1 tpl:z-10 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-sm)] tpl:ring-1 tpl:ring-[var(--tpl-border)]\"\n :class=\"\n severity === 'error'\n ? 'tpl:text-[var(--tpl-danger)]'\n : 'tpl:text-[var(--tpl-warning)]'\n \"\n :title=\"tooltip\"\n :aria-label=\"tooltip\"\n role=\"img\"\n >\n <CircleAlert\n v-if=\"severity === 'error'\"\n :size=\"14\"\n :stroke-width=\"2.25\"\n fill=\"currentColor\"\n stroke=\"var(--tpl-bg)\"\n />\n <TriangleAlert\n v-else\n :size=\"14\"\n :stroke-width=\"2.25\"\n fill=\"currentColor\"\n stroke=\"var(--tpl-bg)\"\n />\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, inject } from \"vue\";\nimport { CircleAlert, TriangleAlert } from \"@lucide/vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { ACCESSIBILITY_LINT_KEY } from \"../../keys\";\n\nconst props = defineProps<{ blockId: string }>();\nconst { t } = useI18n();\nconst lint = inject(ACCESSIBILITY_LINT_KEY, null);\n\nconst blockIssues = computed(() =>\n (lint?.issues.value ?? []).filter((i) => i.blockId === props.blockId),\n);\n\nconst severity = computed<\"error\" | \"warning\" | null>(() => {\n if (blockIssues.value.some((i) => i.severity === \"error\")) return \"error\";\n if (blockIssues.value.some((i) => i.severity === \"warning\")) return \"warning\";\n return null;\n});\n\nconst tooltip = computed(() =>\n severity.value === \"error\"\n ? t.accessibility.badgeError\n : t.accessibility.badgeWarning,\n);\n</script>\n\n<template>\n <span\n v-if=\"severity\"\n class=\"tpl:absolute tpl:top-1 tpl:right-1 tpl:z-10 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:bg-[var(--tpl-bg)] tpl:shadow-[var(--tpl-shadow-sm)] tpl:ring-1 tpl:ring-[var(--tpl-border)]\"\n :class=\"\n severity === 'error'\n ? 'tpl:text-[var(--tpl-danger)]'\n : 'tpl:text-[var(--tpl-warning)]'\n \"\n :title=\"tooltip\"\n :aria-label=\"tooltip\"\n role=\"img\"\n >\n <CircleAlert\n v-if=\"severity === 'error'\"\n :size=\"14\"\n :stroke-width=\"2.25\"\n fill=\"currentColor\"\n stroke=\"var(--tpl-bg)\"\n />\n <TriangleAlert\n v-else\n :size=\"14\"\n :stroke-width=\"2.25\"\n fill=\"currentColor\"\n stroke=\"var(--tpl-bg)\"\n />\n </span>\n</template>\n"],"mappings":";;;;;;;EAMA,IAAM,IAAQ,GACR,EAAE,SAAM,GAAS,EACjB,IAAO,EAAO,GAAwB,KAAK,EAE3C,IAAc,SACjB,GAAM,OAAO,SAAS,EAAE,EAAE,QAAQ,MAAM,EAAE,YAAY,EAAM,QAAQ,CACtE,EAEK,IAAW,QACX,EAAY,MAAM,MAAM,MAAM,EAAE,aAAa,QAAQ,GAAS,UAC9D,EAAY,MAAM,MAAM,MAAM,EAAE,aAAa,UAAU,GAAS,YAC7D,KACP,EAEI,IAAU,QACd,EAAS,UAAU,UACf,EAAE,cAAc,aAChB,EAAE,cAAc,aACrB;mBAKS,EAAA,SAAA,GAAA,EADR,EA0BO,QAAA;;GAxBL,OAAK,EAAA,CAAC,yNACS,EAAA,UAAQ,UAAA,iCAAA,gCAAA,CAAA;GAKtB,OAAO,EAAA;GACP,cAAY,EAAA;GACb,MAAK;MAGG,EAAA,UAAQ,WAAA,GAAA,EADhB,EAME,EAAA,EAAA,EAAA;;GAJC,MAAM;GACN,gBAAc;GACf,MAAK;GACL,QAAO;cAET,EAME,EAAA,EAAA,EAAA;;GAJC,MAAM;GACN,gBAAc;GACf,MAAK;GACL,QAAO"}
|