@litfamily/lithermes 1.0.17 → 1.0.18
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 +8 -8
- package/README_Ko-KR.md +8 -8
- package/assets/lithermes-plugin/payload-version.json +40 -36
- package/assets/lithermes-plugin/plugin.yaml +1 -1
- package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +2 -2
- package/assets/lithermes-plugin/skills/lit-docx/references/page-composition.md +1 -3
- package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +9 -9
- package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_design.py +9 -9
- package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_layout.py +6 -6
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/report.yaml +0 -1
- package/assets/lithermes-plugin/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/atlas.md +2 -2
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/chalk.md +2 -3
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/gazette.md +2 -2
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/ledger.md +5 -5
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/night.md +3 -3
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/paper.md +2 -2
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/signal.md +3 -3
- package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/studio.md +2 -3
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/deck_output.py +8 -8
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-pack.js +96 -96
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +1 -1
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +7 -7
- package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +8 -3
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -15
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -13
- package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +2 -2
- package/package.json +1 -1
- package/readme-assets/badge-version.svg +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"case_insensitive": true,
|
|
3
|
+
"whole_word": false,
|
|
4
|
+
"terms": [
|
|
5
|
+
"click to add title",
|
|
6
|
+
"click to add subtitle",
|
|
7
|
+
"click to add text",
|
|
8
|
+
"content goes here",
|
|
9
|
+
"your logo",
|
|
10
|
+
"placeholder",
|
|
11
|
+
"lorem ipsum",
|
|
12
|
+
"tbd",
|
|
13
|
+
"fixme",
|
|
14
|
+
"todo",
|
|
15
|
+
"본 슬라이드는",
|
|
16
|
+
"슬라이드 7은",
|
|
17
|
+
"최종본에서 걸러냈다",
|
|
18
|
+
"[자사 확인 필요]",
|
|
19
|
+
"[출처 확인 필요]",
|
|
20
|
+
"[작성 중]"
|
|
21
|
+
],
|
|
22
|
+
"soft_terms": [
|
|
23
|
+
"revolutionary",
|
|
24
|
+
"cutting-edge",
|
|
25
|
+
"seamless",
|
|
26
|
+
"seamlessly",
|
|
27
|
+
"innovative",
|
|
28
|
+
"world-class",
|
|
29
|
+
"best-in-class",
|
|
30
|
+
"transformative",
|
|
31
|
+
"next-generation",
|
|
32
|
+
"game-changing",
|
|
33
|
+
"state-of-the-art",
|
|
34
|
+
"AI-powered",
|
|
35
|
+
"AI-generated",
|
|
36
|
+
"as an AI",
|
|
37
|
+
"unlock",
|
|
38
|
+
"empower",
|
|
39
|
+
"synergy",
|
|
40
|
+
"holistic",
|
|
41
|
+
"paradigm shift",
|
|
42
|
+
"frictionless",
|
|
43
|
+
"없다는 것이 발견",
|
|
44
|
+
"판이 굳었다",
|
|
45
|
+
"전제로 깐다",
|
|
46
|
+
"닫아야 할 게이트",
|
|
47
|
+
"역전 금지",
|
|
48
|
+
"논문이 없다",
|
|
49
|
+
"RAM",
|
|
50
|
+
"FTO",
|
|
51
|
+
"CNKI",
|
|
52
|
+
"코퍼스",
|
|
53
|
+
"전이원"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -48,8 +48,8 @@ Families: `image-full`, `image-split`, `photo-grid`, `figure-pair`, `asymmetric-
|
|
|
48
48
|
- Picture families and image covers need a real file beside the source; without one use
|
|
49
49
|
`cover-typographic`, `section-field`, `text-column`, `kpi-row`, `comparison`, `timeline`.
|
|
50
50
|
- Table (timeline, KPI and closing rows): light grid, ink header without fill, hairline rows,
|
|
51
|
-
right-
|
|
52
|
-
Image:
|
|
51
|
+
numbers right-aligned. Chart: hairline grid, direct labels, accent over muted ink.
|
|
52
|
+
Image: no frame, cropped to its box in its own proportions.
|
|
53
53
|
- Fill order: anchor-visual, change-family, distribute, step-up.
|
|
54
54
|
|
|
55
55
|
## Do
|
|
@@ -51,9 +51,8 @@ Families: `step-diagram`, `process`, `method`, `sidebar-note`, `comparison`, `im
|
|
|
51
51
|
- Covers `cover-rail`, `cover-typographic`, `cover-numeral`; sections `section-numeral`,
|
|
52
52
|
`section-rail`; closings `closing-summary-list`, `closing-ask`.
|
|
53
53
|
- Display devices: cover `rail`, statement `drench`, number `tint`, closing `box`.
|
|
54
|
-
- Table: accent-tint header with accent-deep labels, hairline rows, right-
|
|
55
|
-
Chart: hairline grid, direct labels, accent over muted ink
|
|
56
|
-
no crop, no frame.
|
|
54
|
+
- Table: accent-tint header with accent-deep labels, hairline rows, numbers right-aligned, bold
|
|
55
|
+
totals. Chart: hairline grid, direct labels, accent over muted ink. Image: no frame.
|
|
57
56
|
- Fill order: distribute, step-up, change-family, anchor-visual.
|
|
58
57
|
|
|
59
58
|
## Do
|
|
@@ -50,8 +50,8 @@ Families: `summary-box-list`, `text-two-column`, `text-column`, `ledger-table`,
|
|
|
50
50
|
`closing-ask`.
|
|
51
51
|
- Display devices: cover `band`, number `outline`, closing `box`, deck index on.
|
|
52
52
|
- Table: field header with white labels, 0.75 pt grid on every cell, first column on the surface
|
|
53
|
-
tint, right-
|
|
54
|
-
|
|
53
|
+
tint, numbers right-aligned, bold totals. Chart: hairline grid, direct labels, key series in
|
|
54
|
+
accent. Image: hairline frame.
|
|
55
55
|
- Fill order: step-up, distribute, change-family, anchor-visual.
|
|
56
56
|
|
|
57
57
|
## Do
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Ledger (`ledger`)
|
|
2
2
|
|
|
3
|
-
A statement of accounts made readable: small exact type,
|
|
4
|
-
carrying the argument. The green-teal accent marks only the current period and the one
|
|
5
|
-
matters.
|
|
3
|
+
A statement of accounts made readable: small exact type, right-aligned numbers, tables and figure
|
|
4
|
+
rows carrying the argument. The green-teal accent marks only the current period and the one
|
|
5
|
+
figure that matters.
|
|
6
6
|
|
|
7
7
|
## Pick it when
|
|
8
8
|
|
|
@@ -48,8 +48,8 @@ Families: `kpi-row`, `kpi-over-chart`, `dashboard-grid`, `ledger-table`, `table-
|
|
|
48
48
|
with an agenda), `section-numeral`; closings `closing-decision-box`, `closing-ask`.
|
|
49
49
|
- Display devices: cover `figures`, number `tint`, closing `box`, deck index on.
|
|
50
50
|
- Table: field header with white labels, hairline under the header and above totals, no banding,
|
|
51
|
-
right-
|
|
52
|
-
over muted ink
|
|
51
|
+
numbers right-aligned, bold totals. Chart: hairline grid, direct labels, this period in accent
|
|
52
|
+
over muted ink. Image: hairline frame.
|
|
53
53
|
- Fill order: step-up, distribute, anchor-visual, change-family.
|
|
54
54
|
|
|
55
55
|
## Do
|
|
@@ -48,9 +48,9 @@ Families: `full-chart`, `chart-insight`, `kpi-row`, `kpi-over-chart`, `dashboard
|
|
|
48
48
|
- Covers `cover-numeral`, `cover-typographic`, `cover-figures`; sections `section-numeral`,
|
|
49
49
|
`section-field`; closings `closing-statement`, `closing-decision-box`.
|
|
50
50
|
- Display devices: cover `numeral`, statement `open`, number `tint`, closing `band`.
|
|
51
|
-
- Table: surface header with ink labels, hairline rows in line colour, no banding,
|
|
52
|
-
bold totals, highlighted row on accent-tint. Chart: hairline grid, direct labels,
|
|
53
|
-
series that matters
|
|
51
|
+
- Table: surface header with ink labels, hairline rows in line colour, no banding, numbers
|
|
52
|
+
right-aligned, bold totals, highlighted row on accent-tint. Chart: hairline grid, direct labels,
|
|
53
|
+
accent on the series that matters. Image: no frame.
|
|
54
54
|
- Fill order: anchor-visual, step-up, distribute, change-family.
|
|
55
55
|
|
|
56
56
|
## Do
|
|
@@ -45,8 +45,8 @@ Families: `figure-academic`, `figure-pair`, `method`, `chart-insight`, `full-cha
|
|
|
45
45
|
`section-field`; closings `closing-summary-list`, `closing-ask`.
|
|
46
46
|
- Display devices: cover, statement and closing `rules`, number `outline`, deck index on.
|
|
47
47
|
- Table: booktabs, 1 pt top and bottom, 0.5 pt under the header, no verticals, fills or banding,
|
|
48
|
-
right-
|
|
49
|
-
baselines in ink and muted ink)
|
|
48
|
+
numbers right-aligned, bold totals. Chart: hairline grid, direct labels, series order (method in
|
|
49
|
+
accent, baselines in ink and muted ink). Image: no frame.
|
|
50
50
|
- Fill order: anchor-visual, distribute, step-up, change-family.
|
|
51
51
|
|
|
52
52
|
## Do
|
|
@@ -49,9 +49,9 @@ Families: `statement`, `big-number`, `image-split`, `asymmetric-feature`, `proce
|
|
|
49
49
|
`section-numeral`; closings `closing-statement`, `closing-ask` (amount-keyed rows with share
|
|
50
50
|
bars, next step on a floor band).
|
|
51
51
|
- Display devices: cover `drench`, statement `open`, number `field`, closing `band`.
|
|
52
|
-
- Table: open, ink header without fill, hairlines top and bottom only, no banding,
|
|
53
|
-
bold totals, protagonist row on accent-tint. Chart: no gridlines, direct labels,
|
|
54
|
-
|
|
52
|
+
- Table: open, ink header without fill, hairlines top and bottom only, no banding, numbers
|
|
53
|
+
right-aligned, bold totals, protagonist row on accent-tint. Chart: no gridlines, direct labels,
|
|
54
|
+
protagonist in accent. Image: no frame.
|
|
55
55
|
- Fill order: step-up, change-family, anchor-visual, distribute.
|
|
56
56
|
|
|
57
57
|
## Do
|
|
@@ -46,9 +46,8 @@ Families: `asymmetric-feature`, `big-number`, `image-split`, `image-full`, `phot
|
|
|
46
46
|
- Covers `cover-split-image` (first when a picture exists), `cover-rail`, `cover-numeral`; sections
|
|
47
47
|
`section-numeral`, `section-rail`; closings `closing-contact-split`, `closing-summary-list`.
|
|
48
48
|
- Display devices: statement `rules` (two hairlines; the offset rail stood empty), number `tint`, closing `band`.
|
|
49
|
-
- Table: open, ink header over a 2 pt ink rule, no row rules or banding, right-
|
|
50
|
-
totals. Chart: no gridlines, direct labels, protagonist in accent
|
|
51
|
-
and crop allowed, no frame.
|
|
49
|
+
- Table: open, ink header over a 2 pt ink rule, no row rules or banding, numbers right-aligned,
|
|
50
|
+
bold totals. Chart: no gridlines, direct labels, protagonist in accent. Image: no frame.
|
|
52
51
|
- Fill order: change-family, step-up, anchor-visual, distribute.
|
|
53
52
|
|
|
54
53
|
## Do
|
|
@@ -155,7 +155,7 @@ def title_treatment(title, marks, W, H):
|
|
|
155
155
|
beside = [m for m in body if m["x"] + m["w"] / 2 > title["x"] + title["w"]]
|
|
156
156
|
if (title["w"] <= rail_w + TOL and beside and min(m["x"] for m in beside) >= column5 - TOL
|
|
157
157
|
and not any(m["x"] < column5 - TOL and m["y"] > bottom and m["x"] + m["w"] > column5 + TOL for m in body)):
|
|
158
|
-
# What stands in the rail under the title (criteria labels, takeaways, the source) belongs to the rail
|
|
158
|
+
# What stands in the rail under the title (criteria labels, takeaways, the source) belongs to the rail.
|
|
159
159
|
return "side-rail"
|
|
160
160
|
for m in rest:
|
|
161
161
|
if (m["kind"] == "text" and m["sizes"] and ORDINAL.fullmatch(m["text"]) and max(m["sizes"]) >= 44 - SIZE_TOL
|
|
@@ -296,7 +296,7 @@ def is_claim(text):
|
|
|
296
296
|
return bool(EN_AUX.search(t)) or any(word.lower() in EN_REPORT_VERBS for word in words[1:])
|
|
297
297
|
|
|
298
298
|
|
|
299
|
-
# ── OF-115
|
|
299
|
+
# ── OF-115: no region left empty
|
|
300
300
|
|
|
301
301
|
def _title_lines(title):
|
|
302
302
|
"""How many lines a title sets: each broken line wraps on its own (Hangul about 1 em a glyph, Latin 0.55 em)."""
|
|
@@ -332,7 +332,7 @@ def _short_column(p, content, title, shown, body_floor, column5, W, H):
|
|
|
332
332
|
for cut in sorted({m["x"] + m["w"] for m in body}):
|
|
333
333
|
a = [m for m in body if m["x"] + m["w"] <= cut + TOL]
|
|
334
334
|
b = [m for m in body if m["x"] >= cut - TOL]
|
|
335
|
-
# A block across most of the body (a note under both columns) belongs to neither column
|
|
335
|
+
# A block across most of the body (a note under both columns) belongs to neither column.
|
|
336
336
|
across = [m for m in body if m not in a and m not in b]
|
|
337
337
|
if not a or not b or any(m["w"] < 0.7 * (right_edge - left_edge) for m in across):
|
|
338
338
|
continue
|
|
@@ -380,7 +380,7 @@ def _empty_regions(pages, W, H, note):
|
|
|
380
380
|
if share > REGION_SHARE:
|
|
381
381
|
note("OF-115", "HIGH", p["n"], title["name"], f"{share:.0%} of the side rail under the title is empty", REGION_SHARE,
|
|
382
382
|
"Put the slide's criteria labels, takeaways or source in the rail, or give it a top or bottom title.")
|
|
383
|
-
# A takeaway column beside a chart, table or picture
|
|
383
|
+
# A takeaway column beside a chart, table or picture may run on below it.
|
|
384
384
|
body_floor = title["y"] - TOL if shown == "bottom-anchor" else FLOOR
|
|
385
385
|
fields = [m for m in p["marks"] if m["kind"] == "shape" and m["filled"] and m["w"] * m["h"] >= 0.1 * W * H]
|
|
386
386
|
short = _short_column(p, content, title, shown, body_floor, column5, W, H)
|
|
@@ -418,7 +418,7 @@ def _empty_regions(pages, W, H, note):
|
|
|
418
418
|
"Set the sentence on the whole-page field or on the open page; a plate needs content above it.")
|
|
419
419
|
|
|
420
420
|
|
|
421
|
-
# ── OF-116
|
|
421
|
+
# ── OF-116: another tonality draws another skeleton
|
|
422
422
|
|
|
423
423
|
def skeleton(prs):
|
|
424
424
|
W, H = prs.slide_width / 12700.0, prs.slide_height / 12700.0
|
|
@@ -441,7 +441,7 @@ def compare_skeletons(prs, sibling, sibling_name):
|
|
|
441
441
|
a, b = skeleton(prs), skeleton(sibling)
|
|
442
442
|
n = min(len(a), len(b))
|
|
443
443
|
differ = sum(1 for x, y in zip(a, b) if x != y)
|
|
444
|
-
# Two slides once the deck has four content slides
|
|
444
|
+
# Two slides must differ once the deck has four content slides.
|
|
445
445
|
need = 2 if n >= 4 else 1
|
|
446
446
|
if not n or differ >= need:
|
|
447
447
|
return []
|
|
@@ -450,7 +450,7 @@ def compare_skeletons(prs, sibling, sibling_name):
|
|
|
450
450
|
"tier": "derived", "hint": "Give the tonality its own structure: its role defaults, another title zone or partition on the slides it shares."}]
|
|
451
451
|
|
|
452
452
|
|
|
453
|
-
# ── OF-117
|
|
453
|
+
# ── OF-117: no light figure card on a dark ground
|
|
454
454
|
|
|
455
455
|
def _light_figures(number, slide, W, H, note):
|
|
456
456
|
try:
|
|
@@ -478,7 +478,7 @@ def _light_figures(number, slide, W, H, note):
|
|
|
478
478
|
"Put the figure's dark variant beside it (name.dark.png) or draw it as a native chart.")
|
|
479
479
|
|
|
480
480
|
|
|
481
|
-
# ── OF-118
|
|
481
|
+
# ── OF-118: a run-in label keeps its separator
|
|
482
482
|
|
|
483
483
|
def _run_ins(number, slide, note):
|
|
484
484
|
for shape in slide.shapes:
|