@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.
Files changed (40) hide show
  1. package/README.md +8 -8
  2. package/README_Ko-KR.md +8 -8
  3. package/assets/lithermes-plugin/payload-version.json +40 -36
  4. package/assets/lithermes-plugin/plugin.yaml +1 -1
  5. package/assets/lithermes-plugin/skills/frontend-ui-ux/references/complete-contract.md +2 -2
  6. package/assets/lithermes-plugin/skills/lit-docx/references/page-composition.md +1 -3
  7. package/assets/lithermes-plugin/skills/lit-docx/scripts/convert_md_to_docx.py +9 -9
  8. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_design.py +9 -9
  9. package/assets/lithermes-plugin/skills/lit-docx/scripts/docx_layout.py +6 -6
  10. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/brief.yaml +0 -1
  11. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/journal.yaml +0 -1
  12. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/manual.yaml +0 -1
  13. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/memo.yaml +0 -1
  14. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/proposal.yaml +0 -1
  15. package/assets/lithermes-plugin/skills/lit-docx/templates/tonalities/report.yaml +0 -1
  16. package/assets/lithermes-plugin/skills/lit-pptx/FORBIDDEN_TERMS.json +55 -0
  17. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/atlas.md +2 -2
  18. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/chalk.md +2 -3
  19. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/gazette.md +2 -2
  20. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/ledger.md +5 -5
  21. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/night.md +3 -3
  22. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/paper.md +2 -2
  23. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/signal.md +3 -3
  24. package/assets/lithermes-plugin/skills/lit-pptx/references/tonalities/studio.md +2 -3
  25. package/assets/lithermes-plugin/skills/lit-pptx/scripts/deck_output.py +8 -8
  26. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/render-pack.js +96 -96
  27. package/assets/lithermes-plugin/skills/lit-pptx/scripts/lib/template-registry.js +1 -1
  28. package/assets/lithermes-plugin/skills/lit-pptx/scripts/qa_deck.py +7 -7
  29. package/assets/lithermes-plugin/skills/lit-pptx/scripts/validate_pptx.py +8 -3
  30. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/atlas/pack.yaml +0 -13
  31. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/chalk/pack.yaml +0 -13
  32. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/gazette/pack.yaml +0 -13
  33. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/ledger/pack.yaml +2 -15
  34. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/night/pack.yaml +0 -13
  35. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/paper/pack.yaml +0 -13
  36. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/signal/pack.yaml +0 -13
  37. package/assets/lithermes-plugin/skills/lit-pptx/templates/tonalities/studio/pack.yaml +0 -13
  38. package/assets/lithermes-plugin/skills/visual-qa/references/complete-contract.md +2 -2
  39. package/package.json +1 -1
  40. 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-tabular. Chart: hairline grid, direct labels, accent over muted ink, no annotation.
52
- Image: bleed and crop allowed, no frame, cropped to its box in its own proportions.
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-tabular, bold totals.
55
- Chart: hairline grid, direct labels, accent over muted ink, annotations on. Image: side bleed,
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-tabular, bold totals. Chart: hairline grid, direct labels, key series in accent, no
54
- annotation. Image: no bleed or crop, hairline frame.
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, tabular figures, tables and figure rows
4
- carrying the argument. The green-teal accent marks only the current period and the one figure that
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-tabular numbers, bold totals. Chart: hairline grid, direct labels, this period in accent
52
- over muted ink, annotations on. Image: side bleed only, no crop, hairline frame.
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, right-tabular,
52
- bold totals, highlighted row on accent-tint. Chart: hairline grid, direct labels, accent on the
53
- series that matters, annotations on. Image: side bleed, crop allowed, no frame.
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-tabular, bold totals. Chart: hairline grid, direct labels, series order (method in accent,
49
- baselines in ink and muted ink), no annotation. Image: no bleed, crop or frame.
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, right-tabular,
53
- bold totals, protagonist row on accent-tint. Chart: no gridlines, direct labels, protagonist in
54
- accent, annotations on. Image: bleed and crop allowed, no frame.
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-tabular, bold
50
- totals. Chart: no gridlines, direct labels, protagonist in accent, annotations on. Image: bleed
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 that runs on below it
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: