nuvra 0.1.0
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/LICENSE +21 -0
- package/README.md +163 -0
- package/dist/components/document-editor.vue.d.ts +82 -0
- package/dist/components/editor-bubble-menus.vue.d.ts +14 -0
- package/dist/components/editor-canvas.vue.d.ts +30 -0
- package/dist/components/editor-color-picker.vue.d.ts +15 -0
- package/dist/components/editor-find-bar.vue.d.ts +24 -0
- package/dist/components/editor-object-overlay.vue.d.ts +10 -0
- package/dist/components/editor-page-setup.vue.d.ts +12 -0
- package/dist/components/editor-status-bar.vue.d.ts +36 -0
- package/dist/components/editor-table-picker.vue.d.ts +16 -0
- package/dist/components/editor-toolbar.vue.d.ts +38 -0
- package/dist/core/engine/blocks.d.ts +37 -0
- package/dist/core/engine/clipboard.d.ts +23 -0
- package/dist/core/engine/dom.d.ts +64 -0
- package/dist/core/engine/editing.d.ts +44 -0
- package/dist/core/engine/engine.d.ts +319 -0
- package/dist/core/engine/history.d.ts +43 -0
- package/dist/core/engine/input-rules.d.ts +17 -0
- package/dist/core/engine/keymap.d.ts +7 -0
- package/dist/core/engine/lists.d.ts +29 -0
- package/dist/core/engine/marks.d.ts +50 -0
- package/dist/core/engine/schema.d.ts +37 -0
- package/dist/core/engine/search.d.ts +65 -0
- package/dist/core/engine/selection.d.ts +30 -0
- package/dist/core/engine/tables.d.ts +59 -0
- package/dist/core/export.d.ts +21 -0
- package/dist/core/labels.d.ts +150 -0
- package/dist/core/page.d.ts +109 -0
- package/dist/core/pagination.d.ts +23 -0
- package/dist/core/types.d.ts +3 -0
- package/dist/core/ui-state.d.ts +79 -0
- package/dist/editor.vue.d.ts +50 -0
- package/dist/export-cyOnlakM.js +59 -0
- package/dist/export-cyOnlakM.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +4900 -0
- package/dist/index.js.map +1 -0
- package/dist/page-CEEleKNI.js +93 -0
- package/dist/page-CEEleKNI.js.map +1 -0
- package/dist/style.css +2 -0
- package/package.json +72 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
//#region src/core/page.ts
|
|
2
|
+
var e = {
|
|
3
|
+
a3: {
|
|
4
|
+
label: "A3",
|
|
5
|
+
width: 297,
|
|
6
|
+
height: 420
|
|
7
|
+
},
|
|
8
|
+
a4: {
|
|
9
|
+
label: "A4",
|
|
10
|
+
width: 210,
|
|
11
|
+
height: 297
|
|
12
|
+
},
|
|
13
|
+
a5: {
|
|
14
|
+
label: "A5",
|
|
15
|
+
width: 148,
|
|
16
|
+
height: 210
|
|
17
|
+
},
|
|
18
|
+
letter: {
|
|
19
|
+
label: "Letter",
|
|
20
|
+
width: 215.9,
|
|
21
|
+
height: 279.4
|
|
22
|
+
},
|
|
23
|
+
legal: {
|
|
24
|
+
label: "Legal",
|
|
25
|
+
width: 215.9,
|
|
26
|
+
height: 355.6
|
|
27
|
+
}
|
|
28
|
+
}, t = [
|
|
29
|
+
{
|
|
30
|
+
key: "normal",
|
|
31
|
+
margins: {
|
|
32
|
+
top: 25.4,
|
|
33
|
+
right: 25.4,
|
|
34
|
+
bottom: 25.4,
|
|
35
|
+
left: 25.4
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "narrow",
|
|
40
|
+
margins: {
|
|
41
|
+
top: 12.7,
|
|
42
|
+
right: 12.7,
|
|
43
|
+
bottom: 12.7,
|
|
44
|
+
left: 12.7
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: "moderate",
|
|
49
|
+
margins: {
|
|
50
|
+
top: 25.4,
|
|
51
|
+
right: 19.1,
|
|
52
|
+
bottom: 25.4,
|
|
53
|
+
left: 19.1
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
key: "wide",
|
|
58
|
+
margins: {
|
|
59
|
+
top: 25.4,
|
|
60
|
+
right: 50.8,
|
|
61
|
+
bottom: 25.4,
|
|
62
|
+
left: 50.8
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: "official",
|
|
67
|
+
margins: {
|
|
68
|
+
top: 20,
|
|
69
|
+
right: 15,
|
|
70
|
+
bottom: 20,
|
|
71
|
+
left: 30
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
], n = 20, r = 96 / 25.4, i = .05, a = (e) => e * r, o = () => ({
|
|
75
|
+
size: "a4",
|
|
76
|
+
orientation: "portrait",
|
|
77
|
+
margins: { ...t[0].margins }
|
|
78
|
+
}), s = ({ size: t, orientation: r, margins: i }) => {
|
|
79
|
+
let o = e[t] ?? e.a4, s = r === "portrait";
|
|
80
|
+
return {
|
|
81
|
+
width: a(s ? o.width : o.height),
|
|
82
|
+
height: a(s ? o.height : o.width),
|
|
83
|
+
gap: n,
|
|
84
|
+
marginTop: a(i.top),
|
|
85
|
+
marginRight: a(i.right),
|
|
86
|
+
marginBottom: a(i.bottom),
|
|
87
|
+
marginLeft: a(i.left)
|
|
88
|
+
};
|
|
89
|
+
}, c = (e, t) => Object.keys(e).every((n) => Math.abs(e[n] - t[n]) < i);
|
|
90
|
+
//#endregion
|
|
91
|
+
export { c as a, s as i, e as n, o as r, t };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=page-CEEleKNI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-CEEleKNI.js","names":[],"sources":["../src/core/page.ts"],"sourcesContent":["/** Supported paper formats. */\nexport type PageSizeKey = 'a3' | 'a4' | 'a5' | 'letter' | 'legal';\n/** Paper orientation. */\nexport type PageOrientation = 'portrait' | 'landscape';\n/** `page` shows sheets like a word processor, `web` a continuous surface. */\nexport type DocumentViewMode = 'page' | 'web';\n\n/** Page margins in millimetres. */\nexport interface PageMargins {\n /** Top margin. */\n top: number;\n /** Right margin. */\n right: number;\n /** Bottom margin. */\n bottom: number;\n /** Left margin. */\n left: number;\n}\n\n/** Page setup chosen by the user; the host can persist it with `v-model:page`. */\nexport interface PageSettings {\n /** Paper format. */\n size: PageSizeKey;\n /** Paper orientation. */\n orientation: PageOrientation;\n /** Margins in millimetres. */\n margins: PageMargins;\n}\n\n/** Page geometry in CSS pixels, ready for layout. */\nexport interface PageMetrics {\n /** Sheet width. */\n width: number;\n /** Sheet height. */\n height: number;\n /** Grey space between two sheets. */\n gap: number;\n /** Top margin. */\n marginTop: number;\n /** Right margin. */\n marginRight: number;\n /** Bottom margin. */\n marginBottom: number;\n /** Left margin. */\n marginLeft: number;\n}\n\n/** Portrait dimensions of a paper format in millimetres. */\ninterface PaperSize {\n /** Name shown in the page setup. */\n label: string;\n /** Portrait width. */\n width: number;\n /** Portrait height. */\n height: number;\n}\n\n/** Paper sizes in millimetres (portrait). */\nexport const PAGE_SIZES: Record<PageSizeKey, PaperSize> = {\n a3: { label: 'A3', width: 297, height: 420 },\n a4: { label: 'A4', width: 210, height: 297 },\n a5: { label: 'A5', width: 148, height: 210 },\n letter: { label: 'Letter', width: 215.9, height: 279.4 },\n legal: { label: 'Legal', width: 215.9, height: 355.6 }\n};\n\n/** Margin presets offered by the page setup, in millimetres; the key doubles as the label suffix. */\nexport const MARGIN_PRESETS = [\n { key: 'normal', margins: { top: 25.4, right: 25.4, bottom: 25.4, left: 25.4 } },\n { key: 'narrow', margins: { top: 12.7, right: 12.7, bottom: 12.7, left: 12.7 } },\n { key: 'moderate', margins: { top: 25.4, right: 19.1, bottom: 25.4, left: 19.1 } },\n { key: 'wide', margins: { top: 25.4, right: 50.8, bottom: 25.4, left: 50.8 } },\n /** O‘zDSt 1.14 requisites for official documents. */\n { key: 'official', margins: { top: 20, right: 15, bottom: 20, left: 30 } }\n] as const satisfies ReadonlyArray<{ key: string; margins: PageMargins }>;\n\n/** Smallest zoom in percent; low enough for an A4 sheet to fit a phone screen. */\nexport const ZOOM_MIN = 30;\n/** Largest zoom in percent. */\nexport const ZOOM_MAX = 200;\n/** Zoom change per step of the zoom buttons and slider, in percent. */\nexport const ZOOM_STEP = 10;\n\n/** Grey space between two sheets in page view, in CSS pixels. */\nconst PAGE_GAP = 20;\n/** CSS pixels per millimetre at 96 DPI. */\nconst PX_PER_MM = 96 / 25.4;\n/** Margin differences below this many millimetres count as equal (rounding of unit conversions). */\nconst MARGIN_TOLERANCE_MM = 0.05;\n\n/** Converts millimetres to CSS pixels. */\nconst mmToPx = (value: number): number => value * PX_PER_MM;\n\n/** Default page setup: portrait A4 with normal margins. */\nexport const createPageSettings = (): PageSettings => ({\n size: 'a4',\n orientation: 'portrait',\n margins: { ...MARGIN_PRESETS[0].margins }\n});\n\n/** Converts page settings into pixel geometry; an unknown paper size falls back to A4. */\nexport const getPageMetrics = ({ size, orientation, margins }: PageSettings): PageMetrics => {\n const paper = PAGE_SIZES[size] ?? PAGE_SIZES.a4;\n const portrait = orientation === 'portrait';\n return {\n width: mmToPx(portrait ? paper.width : paper.height),\n height: mmToPx(portrait ? paper.height : paper.width),\n gap: PAGE_GAP,\n marginTop: mmToPx(margins.top),\n marginRight: mmToPx(margins.right),\n marginBottom: mmToPx(margins.bottom),\n marginLeft: mmToPx(margins.left)\n };\n};\n\n/** Whether two margin sets are equal, used to highlight the matching preset. */\nexport const isSameMargins = (a: PageMargins, b: PageMargins): boolean =>\n (Object.keys(a) as Array<keyof PageMargins>).every(side => Math.abs(a[side] - b[side]) < MARGIN_TOLERANCE_MM);\n"],"mappings":";AA0DA,IAAa,IAA6C;CACxD,IAAI;EAAE,OAAO;EAAM,OAAO;EAAK,QAAQ;CAAI;CAC3C,IAAI;EAAE,OAAO;EAAM,OAAO;EAAK,QAAQ;CAAI;CAC3C,IAAI;EAAE,OAAO;EAAM,OAAO;EAAK,QAAQ;CAAI;CAC3C,QAAQ;EAAE,OAAO;EAAU,OAAO;EAAO,QAAQ;CAAM;CACvD,OAAO;EAAE,OAAO;EAAS,OAAO;EAAO,QAAQ;CAAM;AACvD,GAGa,IAAiB;CAC5B;EAAE,KAAK;EAAU,SAAS;GAAE,KAAK;GAAM,OAAO;GAAM,QAAQ;GAAM,MAAM;EAAK;CAAE;CAC/E;EAAE,KAAK;EAAU,SAAS;GAAE,KAAK;GAAM,OAAO;GAAM,QAAQ;GAAM,MAAM;EAAK;CAAE;CAC/E;EAAE,KAAK;EAAY,SAAS;GAAE,KAAK;GAAM,OAAO;GAAM,QAAQ;GAAM,MAAM;EAAK;CAAE;CACjF;EAAE,KAAK;EAAQ,SAAS;GAAE,KAAK;GAAM,OAAO;GAAM,QAAQ;GAAM,MAAM;EAAK;CAAE;CAE7E;EAAE,KAAK;EAAY,SAAS;GAAE,KAAK;GAAI,OAAO;GAAI,QAAQ;GAAI,MAAM;EAAG;CAAE;AAC3E,GAUM,IAAW,IAEX,IAAY,KAAK,MAEjB,IAAsB,KAGtB,KAAU,MAA0B,IAAQ,GAGrC,WAA0C;CACrD,MAAM;CACN,aAAa;CACb,SAAS,EAAE,GAAG,EAAe,EAAE,CAAC,QAAQ;AAC1C,IAGa,KAAkB,EAAE,SAAM,gBAAa,iBAAyC;CAC3F,IAAM,IAAQ,EAAW,MAAS,EAAW,IACvC,IAAW,MAAgB;CACjC,OAAO;EACL,OAAO,EAAO,IAAW,EAAM,QAAQ,EAAM,MAAM;EACnD,QAAQ,EAAO,IAAW,EAAM,SAAS,EAAM,KAAK;EACpD,KAAK;EACL,WAAW,EAAO,EAAQ,GAAG;EAC7B,aAAa,EAAO,EAAQ,KAAK;EACjC,cAAc,EAAO,EAAQ,MAAM;EACnC,YAAY,EAAO,EAAQ,IAAI;CACjC;AACF,GAGa,KAAiB,GAAgB,MAC3C,OAAO,KAAK,CAAC,CAAC,CAA8B,OAAM,MAAQ,KAAK,IAAI,EAAE,KAAQ,EAAE,EAAK,IAAI,CAAmB"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.doc-bubble[data-v-491ba8f4]{border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);border-radius:8px;align-items:center;gap:1px;padding:3px;display:flex;position:fixed;box-shadow:0 6px 20px #10182829}.doc-bubble.is-hidden[data-v-491ba8f4]{visibility:hidden}.doc-bubble__divider[data-v-491ba8f4]{background:var(--el-border-color-lighter);flex:0 0 1px;align-self:stretch;margin:3px 4px}.doc-bubble .doc-tb-button.is-danger[data-v-491ba8f4]:hover:not(:disabled){color:var(--el-color-danger);background:var(--el-color-danger-light-9)}.doc-bubble__link[data-v-491ba8f4]{max-width:260px;color:var(--el-color-primary);align-items:center;gap:5px;padding:0 6px;font-size:12px;text-decoration:none;display:inline-flex}.doc-bubble__link span[data-v-491ba8f4]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.doc-bubble__form[data-v-491ba8f4]{gap:4px;width:280px;display:flex}.object-overlay[data-v-7da0d742]{z-index:3;pointer-events:none;position:absolute;inset:0}.object-overlay__image[data-v-7da0d742]{box-sizing:border-box;outline-offset:1px;outline:2px solid #3b82f6;position:absolute}.object-overlay__handle[data-v-7da0d742]{box-sizing:border-box;pointer-events:auto;background:#fff;border:1.5px solid #3b82f6;border-radius:2px;width:10px;height:10px;position:absolute}.object-overlay__handle.is-top-left[data-v-7da0d742]{cursor:nwse-resize;top:-6px;left:-6px}.object-overlay__handle.is-top-right[data-v-7da0d742]{cursor:nesw-resize;top:-6px;right:-6px}.object-overlay__handle.is-bottom-left[data-v-7da0d742]{cursor:nesw-resize;bottom:-6px;left:-6px}.object-overlay__handle.is-bottom-right[data-v-7da0d742]{cursor:nwse-resize;bottom:-6px;right:-6px}.object-overlay__size[data-v-7da0d742]{color:#fff;background:#101828bf;border-radius:4px;padding:2px 6px;font:11px/16px system-ui,sans-serif;position:absolute;bottom:4px;right:4px}.object-overlay__guide[data-v-7da0d742]{border-left:1px dashed #3b82f6;width:0;position:absolute}.doc-canvas[data-v-10cbe4d1]{box-sizing:border-box;min-height:0;padding:var(--doc-editor-canvas-padding);overscroll-behavior:contain;background:#e9ebef;flex:auto;position:relative;overflow:auto}.doc-canvas.is-auto[data-v-10cbe4d1]{min-height:var(--doc-editor-min-height);max-height:var(--doc-editor-max-height);flex:none}.doc-canvas__sizer[data-v-10cbe4d1]{margin:0 auto;position:relative}.doc-canvas__stage[data-v-10cbe4d1]{--page-height:1123px;--pages-height:1123px;--margin-top:96px;--margin-right:96px;--margin-bottom:96px;--margin-left:96px;--page-break-label:"";transform-origin:0 0;position:absolute;top:0;left:0}.doc-canvas.is-web .doc-canvas__stage[data-v-10cbe4d1]{background:#fff;box-shadow:0 0 0 1px #1018280f,0 1px 4px #10182814}.doc-canvas__sheets[data-v-10cbe4d1]{pointer-events:none;position:absolute;inset:0}.doc-canvas__sheet[data-v-10cbe4d1]{width:100%;height:var(--page-height);background:#fff;position:absolute;left:0;box-shadow:0 0 0 1px #1018280f,0 2px 8px #1018281a}.doc-canvas__page-number[data-v-10cbe4d1]{right:0;bottom:calc(var(--margin-bottom) / 2 - 8px);color:#98a2b3;text-align:center;font:11px/16px system-ui,sans-serif;position:absolute;left:0}.doc-canvas__content[data-v-10cbe4d1]{box-sizing:border-box;min-height:inherit;caret-color:#1f2328;outline:none;position:relative}.doc-canvas.is-page .doc-canvas__content[data-v-10cbe4d1]{min-height:var(--pages-height);padding:var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left)}.doc-canvas.is-web .doc-canvas__content[data-v-10cbe4d1]{padding:40px 56px}.doc-canvas.is-auto.is-web .doc-canvas__content[data-v-10cbe4d1]{padding:16px 20px}.find-bar[data-v-4e66f75e]{z-index:5;border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light);border-radius:10px;align-items:flex-start;gap:2px;padding:5px;display:flex;position:absolute;top:8px;right:20px}.find-bar__rows[data-v-4e66f75e]{gap:5px;display:grid}.find-bar__row[data-v-4e66f75e]{align-items:center;gap:1px;display:flex}.find-bar__input[data-v-4e66f75e]{width:220px;margin-right:4px}.find-bar__count[data-v-4e66f75e]{color:var(--el-text-color-secondary);font-variant-numeric:tabular-nums;font-size:11px}.find-bar__chevron[data-v-4e66f75e]{transition:transform .15s}.is-active>.find-bar__chevron[data-v-4e66f75e]{transform:rotate(90deg)}.find-bar__text-button[data-v-4e66f75e]{padding:0 8px;font-size:12px}@container (width<=560px){.find-bar[data-v-4e66f75e]{left:8px;right:8px}.find-bar__rows[data-v-4e66f75e]{flex:auto;min-width:0}.find-bar__input[data-v-4e66f75e]{flex:auto;width:auto}}.status-bar[data-v-3938214e]{border-top:1px solid var(--el-border-color-lighter);min-height:32px;color:var(--el-text-color-secondary);background:var(--el-bg-color);-webkit-user-select:none;user-select:none;flex:none;justify-content:space-between;align-items:center;gap:12px;padding:0 6px 0 12px;font-size:12px;display:flex}.status-bar__info[data-v-3938214e]{white-space:nowrap;gap:14px;min-width:0;display:flex;overflow:hidden}.is-limit[data-v-3938214e]{color:var(--el-color-danger);font-weight:600}.status-bar__controls[data-v-3938214e]{flex:none;align-items:center;gap:1px;display:flex}.status-bar .doc-tb-button[data-v-3938214e]{min-width:24px;height:24px;font-size:12px}.status-bar__segmented[data-v-3938214e]{background:var(--el-fill-color-light);border-radius:7px;margin-right:6px;padding:2px;display:flex}.status-bar__segmented .doc-tb-button[data-v-3938214e]{height:20px}.status-bar__segmented .doc-tb-button.is-active[data-v-3938214e]{background:var(--el-bg-color);box-shadow:0 1px 2px #1018281f}.status-bar__slider[data-v-3938214e]{--slider-line:var(--el-text-color-placeholder);--slider-thumb:var(--el-text-color-regular);cursor:pointer;background:linear-gradient(var(--slider-line), var(--slider-line)) calc(2px + (100% - 4px) * var(--v5617940e)) 50% / 1px 8px no-repeat, linear-gradient(var(--slider-line), var(--slider-line)) 0 50% / 100% 1px no-repeat;appearance:none;width:100px;height:16px;margin:0 2px;padding:0}.status-bar__slider[data-v-3938214e]:focus{outline:none}.status-bar__slider[data-v-3938214e]::-webkit-slider-runnable-track{background:0 0;height:16px}.status-bar__slider[data-v-3938214e]::-moz-range-track{background:0 0;height:16px}.status-bar__slider[data-v-3938214e]::-webkit-slider-thumb{background:var(--slider-thumb);appearance:none;border:none;border-radius:1px;width:4px;height:12px;margin-top:2px;transition:background-color .15s}.status-bar__slider[data-v-3938214e]::-moz-range-thumb{background:var(--slider-thumb);border:none;border-radius:1px;width:4px;height:12px;transition:background-color .15s}.status-bar__slider[data-v-3938214e]:hover,.status-bar__slider[data-v-3938214e]:active{--slider-thumb:var(--el-color-primary)}.status-bar__slider[data-v-3938214e]:focus-visible::-webkit-slider-thumb{outline:2px solid var(--el-color-primary-light-5);outline-offset:1px}.status-bar__slider[data-v-3938214e]:focus-visible::-moz-range-thumb{outline:2px solid var(--el-color-primary-light-5);outline-offset:1px}.status-bar .status-bar__zoom-step[data-v-3938214e]{min-width:20px;height:20px;padding:0}.status-bar__zoom[data-v-3938214e]{font-variant-numeric:tabular-nums;min-width:40px}@container (width<=560px){.status-bar__slider[data-v-3938214e],.status-bar__segmented[data-v-3938214e]{display:none}}.color-picker[data-v-1e543a8f]{align-items:center;display:inline-flex}.color-picker__apply[data-v-1e543a8f]{min-width:26px;padding-bottom:3px;position:relative}.color-picker__letter[data-v-1e543a8f]{font-family:Georgia,serif;font-size:15px;font-weight:700}.color-picker__bar[data-v-1e543a8f]{border-radius:1px;height:3px;position:absolute;bottom:4px;left:6px;right:6px;box-shadow:inset 0 0 0 1px #0000001f}.palette[data-v-1e543a8f]{gap:8px;display:grid}.palette__reset[data-v-1e543a8f],.palette__custom[data-v-1e543a8f]{height:28px;color:var(--el-text-color-regular);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 6px;font-size:13px;display:flex}.palette__reset[data-v-1e543a8f]:hover,.palette__custom[data-v-1e543a8f]:hover{background:var(--el-fill-color-light)}.palette__reset-swatch[data-v-1e543a8f]{box-sizing:border-box;border:1px solid var(--el-border-color);border-radius:3px;width:16px;height:16px}.palette__reset-swatch.is-text[data-v-1e543a8f]{background:#1f2328}.palette__reset-swatch.is-highlight[data-v-1e543a8f]{background:linear-gradient(to top right,#fff calc(50% - 1px),#e11d48 50%,#fff calc(50% + 1px))}.palette__grid[data-v-1e543a8f]{grid-template-columns:repeat(10,18px);justify-content:space-between;gap:3px;display:grid}.palette__swatch[data-v-1e543a8f]{cursor:pointer;border:1px solid #0000001f;border-radius:3px;width:18px;height:18px;padding:0;transition:transform .1s}.palette__swatch[data-v-1e543a8f]:hover{transform:scale(1.15)}.palette__swatch.is-selected[data-v-1e543a8f]{box-shadow:0 0 0 2px #fff, 0 0 0 3.5px var(--el-color-primary)}.palette__custom input[data-v-1e543a8f]{cursor:pointer;background:0 0;border:0;width:22px;height:22px;padding:0}.page-setup[data-v-3c249e34]{color:var(--el-text-color-regular);gap:12px;display:grid}.page-setup__section[data-v-3c249e34]{gap:6px;display:grid}.page-setup__section h4[data-v-3c249e34]{color:var(--el-text-color-primary);margin:0;font-size:12px;font-weight:600}.page-setup__grid[data-v-3c249e34]{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.page-setup__grid--sizes[data-v-3c249e34],.page-setup__grid--presets[data-v-3c249e34]{grid-template-columns:repeat(3,minmax(0,1fr))}.page-setup__chip[data-v-3c249e34]{border:1px solid var(--el-border-color);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:6px;flex-direction:column;align-items:flex-start;gap:1px;padding:5px 8px;font-size:12px;display:flex}.page-setup__chip[data-v-3c249e34]:hover{border-color:var(--el-color-primary-light-5)}.page-setup__chip.is-active[data-v-3c249e34]{border-color:var(--el-color-primary);color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.page-setup__chip--row[data-v-3c249e34]{flex-direction:row;align-items:center;gap:6px}.page-setup__chip small[data-v-3c249e34]{color:var(--el-text-color-secondary);white-space:nowrap;font-size:10px}.page-setup__caption[data-v-3c249e34]{color:var(--el-text-color-secondary);margin-top:4px;font-size:11px}.page-setup__field[data-v-3c249e34]{color:var(--el-text-color-secondary);gap:3px;font-size:11px;display:grid}.page-setup__field[data-v-3c249e34] .el-input-number{width:100%}.table-picker[data-v-a07514e8]{gap:6px;display:grid}.table-picker__grid[data-v-a07514e8]{grid-template-columns:repeat(10,16px);gap:3px;display:grid}.table-picker__cell[data-v-a07514e8]{border:1px solid var(--el-border-color);background:var(--el-bg-color);cursor:pointer;border-radius:2px;width:16px;height:16px;padding:0}.table-picker__cell.is-active[data-v-a07514e8]{border-color:var(--el-color-primary);background:var(--el-color-primary-light-8)}.table-picker__size[data-v-a07514e8]{color:var(--el-text-color-regular);text-align:center;font-size:12px}.doc-toolbar[data-v-7a9485af]{box-sizing:border-box;border-bottom:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);scrollbar-width:thin;flex:none;align-items:center;gap:2px;min-height:40px;padding:5px 8px;display:flex;overflow-x:auto}.doc-toolbar__group[data-v-7a9485af]{flex:none;align-items:center;gap:1px;display:flex}.doc-toolbar__divider[data-v-7a9485af]{background:var(--el-border-color-lighter);flex:0 0 1px;align-self:stretch;margin:4px 5px}.doc-toolbar__spacer[data-v-7a9485af]{flex:auto;min-width:8px}.doc-toolbar__block[data-v-7a9485af]{width:108px}.doc-toolbar__font[data-v-7a9485af]{width:118px}.doc-toolbar__size[data-v-7a9485af]{width:50px}.doc-toolbar__size-menu[data-v-7a9485af] .el-dropdown-menu__item{min-width:96px}.doc-toolbar__form[data-v-7a9485af]{gap:8px;display:grid}.doc-toolbar__form label[data-v-7a9485af]{color:var(--el-text-color-secondary);gap:4px;font-size:12px;display:grid}.doc-toolbar__form-actions[data-v-7a9485af]{justify-content:flex-end;gap:6px;display:flex}.doc-toolbar__caption[data-v-7a9485af]{color:var(--el-text-color-secondary);text-align:center;font-size:11px}.doc-toolbar__inline-form[data-v-7a9485af]{gap:6px;display:flex}.doc-toolbar__characters[data-v-7a9485af]{grid-template-columns:repeat(9,minmax(0,1fr));gap:2px;display:grid}.doc-toolbar__characters button[data-v-7a9485af]{height:26px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:0;font-size:15px}.doc-toolbar__characters button[data-v-7a9485af]:hover{background:var(--el-fill-color-light)}.doc-content{color:#1f2328;white-space:pre-wrap;overflow-wrap:break-word;tab-size:4;font-family:Times New Roman,Times,serif;font-size:12pt;line-height:1.5}.doc-content :is(p,h1,h2,h3,h4,h5,h6):not([dir]){unicode-bidi:plaintext}.doc-content p{margin:0 0 6pt}.doc-content h1,.doc-content h2,.doc-content h3,.doc-content h4,.doc-content h5,.doc-content h6{margin:0 0 6pt;padding-top:6pt;font-weight:700;line-height:1.25}.doc-content h1{font-size:20pt}.doc-content h2{font-size:16pt}.doc-content h3{font-size:14pt}.doc-content h4{font-size:12pt}.doc-content h5{font-size:11pt}.doc-content h6{font-size:10pt}.doc-content ul,.doc-content ol{margin:0 0 6pt;padding-left:24pt}.doc-content li>p{margin-bottom:2pt}.doc-content ul[data-type=taskList]{padding-left:2pt;list-style:none}.doc-content ul[data-type=taskList] li{align-items:flex-start;gap:6pt;display:flex}.doc-content ul[data-type=taskList] li>label{-webkit-user-select:none;user-select:none;flex:none;margin-top:.3em}.doc-content ul[data-type=taskList] li>div{flex:auto;min-width:0}.doc-content ul[data-type=taskList] li[data-checked=true]>div{color:#667085;text-decoration:line-through}.doc-content blockquote{color:#475467;border-left:3px solid #b3c5f5;margin:0 0 6pt;padding:2pt 0 2pt 12pt}.doc-content blockquote>p:last-child,.doc-content li>p:last-child,.doc-content td>p:last-child,.doc-content th>p:last-child{margin-bottom:0}.doc-content pre{white-space:pre-wrap;background:#f4f6f8;border-radius:4px;margin:0 0 6pt;padding:8pt 10pt;font-family:Consolas,Courier New,monospace;font-size:10pt;line-height:1.45}.doc-content code{background:#eef1f4;border-radius:3px;padding:1px 4px;font-family:Consolas,Courier New,monospace;font-size:.9em}.doc-content pre code{font-size:inherit;background:0 0;padding:0}.doc-content hr{border:0;border-bottom:1px solid #c4cad4;height:0;margin:0 0 6pt;padding-top:6pt}.doc-content a{color:#1d4ed8;text-decoration:underline}.doc-content mark{color:inherit;border-radius:2px;padding:0 1px}.doc-content img{max-width:100%;height:auto}.doc-content img[data-align=left]{margin:0 auto 6pt 0;display:block}.doc-content img[data-align=center]{margin:0 auto 6pt;display:block}.doc-content img[data-align=right]{margin:0 0 6pt auto;display:block}.doc-content table{border-collapse:collapse;table-layout:fixed;width:100%;margin:0 0 6pt}.doc-content td,.doc-content th{box-sizing:border-box;vertical-align:top;border:1px solid #8f99a8;min-width:1em;padding:3pt 5pt}.doc-content th{text-align:left;background:#f2f4f7;font-weight:700}.doc-content .doc-page-break{break-after:page;page-break-after:always;height:0}.doc-tb-button{box-sizing:border-box;min-width:28px;height:28px;color:var(--el-text-color-regular);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 5px;font-size:13px;line-height:1;transition:background-color .12s,color .12s;display:inline-flex}.doc-tb-button:hover:not(:disabled){background:var(--el-fill-color-light)}.doc-tb-button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.doc-tb-button.is-active{color:var(--el-color-primary);background:var(--el-color-primary-light-9)}.doc-tb-button:disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.doc-tb-button--select{justify-content:space-between;padding:0 4px 0 7px}.doc-tb-button--caret{min-width:16px;padding:0 2px}.doc-tb-button__label{text-overflow:ellipsis;overflow:hidden}.doc-editor-popper.el-popper{border-radius:10px}.doc-editor-popper.el-popover.el-popper{padding:10px}.doc-menu.el-dropdown-menu{padding:4px}.doc-menu .el-dropdown-menu__item{border-radius:6px;gap:8px;min-width:168px;padding:5px 12px 5px 8px;font-size:13px;line-height:20px}.doc-menu .el-dropdown-menu__item.is-selected{color:var(--el-color-primary);font-weight:600}.doc-menu__hint{color:var(--el-text-color-placeholder);margin-left:auto;padding-left:20px;font-size:11px;font-weight:400}.doc-menu__h1{font-size:18px;font-weight:700}.doc-menu__h2{font-size:16px;font-weight:700}.doc-menu__h3{font-size:15px;font-weight:700}.doc-menu__h4{font-size:14px;font-weight:700}.doc-bubble-host{z-index:2100}.el-form-item.is-error .el-form-item__content .document-editor .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-form-item.is-error .el-form-item__content .document-editor .el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-form-item.is-error .el-form-item__content .document-editor .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.doc-canvas .doc-content{--doc-placeholder:""}.doc-canvas .doc-content.is-empty>p:first-child:before{float:left;color:#98a2b3;content:var(--doc-placeholder);pointer-events:none;height:0}.doc-canvas .doc-content .doc-page-break{cursor:default;-webkit-user-select:none;user-select:none;height:18px;margin-bottom:6pt;position:relative}.doc-canvas .doc-content .doc-page-break:before{content:"";border-top:1px dashed #98a2b3;position:absolute;top:50%;left:0;right:0}.doc-canvas .doc-content .doc-page-break:after{color:#667085;letter-spacing:.04em;text-transform:uppercase;content:var(--page-break-label);background:#fff;padding:0 8px;font:10px/16px system-ui,sans-serif;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.doc-canvas .doc-content td,.doc-canvas .doc-content th{position:relative}.doc-canvas .doc-content .doc-cell-selected:after{content:"";pointer-events:none;background:#3b82f629;position:absolute;inset:0}.doc-canvas .doc-content.has-cell-selection ::selection{background:0 0}.doc-canvas .doc-content.is-column-resize,.doc-canvas .doc-content.is-column-resize *{cursor:col-resize}.doc-canvas .doc-content ul[data-type=taskList] input[type=checkbox]{cursor:pointer}.doc-canvas .doc-content a{cursor:text}::highlight(doc-search){background-color:#facc1573}::highlight(doc-search-current){background-color:#f973168c}.document-editor[data-v-319ed1dc]{--doc-editor-canvas-padding:50px;--doc-editor-height:760px;--doc-editor-min-height:240px;--doc-editor-max-height:600px;box-sizing:border-box;width:100%;min-width:0;height:var(--doc-editor-height);border:1px solid var(--el-border-color);background:var(--el-bg-color);border-radius:10px;flex-direction:column;min-height:360px;transition:border-color .16s;display:flex;position:relative;overflow:hidden;container-type:inline-size}.document-editor[data-v-319ed1dc]:focus-within{border-color:var(--el-color-primary-light-5)}.document-editor.is-auto-height[data-v-319ed1dc]{height:auto;min-height:0}.document-editor.is-fullscreen[data-v-319ed1dc]{border:0;border-radius:0;height:100dvh;position:fixed;inset:0}.document-editor__body[data-v-319ed1dc]{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.document-editor__source[data-v-319ed1dc]{box-sizing:border-box;color:#1f2328;resize:none;tab-size:2;background:#fbfcfd;border:0;outline:none;flex:auto;min-height:0;margin:0;padding:16px 20px;font:13px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}.document-editor__uploading[data-v-319ed1dc]{color:#fff;pointer-events:none;background:#101828cc;border-radius:999px;padding:6px 12px;font-size:12px;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}
|
|
2
|
+
/*$vite$:1*/
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nuvra",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Word-style document editor for Vue 3: page view, tables, images, find & replace, print and Word export.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"vue",
|
|
7
|
+
"vue3",
|
|
8
|
+
"editor",
|
|
9
|
+
"rich-text",
|
|
10
|
+
"wysiwyg",
|
|
11
|
+
"document",
|
|
12
|
+
"word",
|
|
13
|
+
"element-plus"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Eshonqul",
|
|
17
|
+
"homepage": "https://github.com/eshonqul6772/nuvra#readme",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/eshonqul6772/nuvra.git"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/eshonqul6772/nuvra/issues"
|
|
24
|
+
},
|
|
25
|
+
"type": "module",
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"module": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"import": "./dist/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./style.css": "./dist/style.css"
|
|
38
|
+
},
|
|
39
|
+
"sideEffects": [
|
|
40
|
+
"**/*.css"
|
|
41
|
+
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "run-s build:lib build:types",
|
|
44
|
+
"build:lib": "vite build",
|
|
45
|
+
"build:types": "vue-tsc -p tsconfig.build.json",
|
|
46
|
+
"type-check": "vue-tsc --noEmit",
|
|
47
|
+
"biome": "biome check .",
|
|
48
|
+
"biome:fix": "biome check --write .",
|
|
49
|
+
"prepublishOnly": "run-s biome type-check build"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"element-plus": "^2.9.0",
|
|
53
|
+
"vue": "^3.5.0"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@lucide/vue": "^1.39.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@biomejs/biome": "2.3.12",
|
|
60
|
+
"@vitejs/plugin-vue": "^6.0.8",
|
|
61
|
+
"@vue/tsconfig": "^0.9.1",
|
|
62
|
+
"element-plus": "^2.14.5",
|
|
63
|
+
"npm-run-all2": "^9.0.2",
|
|
64
|
+
"typescript": "~6.0.3",
|
|
65
|
+
"vite": "^8.2.2",
|
|
66
|
+
"vue": "^3.5.41",
|
|
67
|
+
"vue-tsc": "^3.3.11"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": "^22.18.0 || >=24.12.0"
|
|
71
|
+
}
|
|
72
|
+
}
|