Skip to content

Publish scoped package as public - #525

Merged
mashbean merged 1 commit into
masterfrom
codex/fix-editor-npm-access
Jul 2, 2026
Merged

Publish scoped package as public#525
mashbean merged 1 commit into
masterfrom
codex/fix-editor-npm-access

Conversation

@mashbean

@mashbean mashbean commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add --access public to the npm publish ./dist --tag latest command for the scoped @matters/matters-editor package.

Context

#524 fixed the missing explicit latest tag, but the next master publish still failed with npm 404 because scoped packages need public access specified during publish.

Validation

  • git diff --check
  • Commit hook ran npm run lint
  • Commit hook ran npm test

@mashbean
mashbean requested a review from a team as a code owner July 2, 2026 15:21
@mashbean
mashbean merged commit 24c77f1 into master Jul 2, 2026
6 checks passed
yingshinlee added a commit to thematters/matters-web that referenced this pull request Jul 6, 2026
…evelop → master) (#5991)

* chore(bump): bump the version for v6.11.2

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): rearrange campaign detail to Option A layout (#5971)

- right aside: discussion on top, participants below (was participants top)
- quote wall: move from the aside to a pull-quote band in the centre
  column, shown on every viewport; uniform pull-quote cards (drop the
  random sticky-note colours) and remove the ✨ from the title
- mobile: discussion + participants both shrink to one-line chips that
  open their dialog/drawer (the participants chip is new)
- keep CircleCommentForm, the back-to-article link, retract, and the
  participants drawer

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* feat(quote): gate post-to-wall on the campaign's enableQuoteWall flag (#5976)

The post-to-wall affordance now shows only for articles whose campaign has the
quote wall enabled (backend `enableQuoteWall`), instead of any campaign article.
Adds `canPostQuoteToWall` and queries the flag in the quote-image fragment. The
七日書 logo still uses name-based detection (unchanged).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): discussion polish — open to all + likes, button/layout/dialog refinements (#5978)

* feat(campaign): open discussion to all logged-in users + enable comment likes

- canComment relaxed to viewer.isAuthed (was: succeeded participant only); the
  server enforces the same rule. Drops the now-unused viewer-application query.
- enable upvote (like) on discussion comments (hasUpvote), in both the inline
  preview and the full dialog. Downvote stays off.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): polish the discussion (2-line clamp, max-height, inline submit, i18n)

- comment content: collapse campaign-discussion comments to 2 lines with a
  proper 展開/收回 toggle (was 4 lines, expand-only) — campaignDiscussion only
- discussion preview: cap height (20rem) so a busy thread scrolls instead of
  pushing the participants list down the rail
- comment form: add an `inlineFooter` variant that places the submit inside the
  editor box; the campaign discussion uses it (circles unaffected)
- i18n: fill the zh-Hant / zh-Hans translations for the discussion + quote-wall
  strings that were still showing the English defaults

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): discussion likes use a heart, smaller comment font, hide scrollbars

- the campaign-discussion comment upvote now renders a heart (like) icon
  instead of the circle up-vote arrow (gated to campaignDiscussion only)
- shrink campaign-discussion comment text to 14px (was 15)
- hide the preview scrollbars and clip horizontal overflow so the comment list
  scrolls cleanly without visible bars

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): discussion comments expand-only with consistent font

Drop the per-comment collapse: campaign-discussion comments now clamp to 2
lines then expand-only (like article comments), via the rich expand path. This
also fixes the font mismatch between the clamped and expanded states (the
previous non-rich Truncate path rendered them at different sizes).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): match the "展開" button font to the comment text

Pass the comment size down to Expandable so the rich "展開" button renders at
14px (the campaign-discussion comment size) instead of the larger default.
Gated to campaignDiscussion; other comment types unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): match the discussion title size to the participants title

Both are right-rail section titles at the same level, so bump 討論區 from 16px
to 20px to match 參與者 (SideParticipants).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): style mobile discussion entry as outlined green pill

Replace the green-box chip (with 💬 and chevron) with a Secondary
outlined pill that mirrors the Apply button's outlined state, so the
discussion entry reads one clear level below the apply button.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): mobile header polish — drop duplicate participants, tighten spacing

- remove the duplicate mobile participants chip (the avatar row inside
  InfoHeader already shows them)
- reduce the cover→title gap on mobile (sp24 → sp12; desktop keeps sp24)
- add spacing above the mobile discussion entry button so it no longer
  crowds the apply button above it

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): widen discussion dialog to DS `medium` (480px)

The default Dialog is `small` (375px / fixedWidth), which crams avatars
and threaded comments. Switch the discussion dialog to fixedWidth={false}
and constrain its body to 480px on sm-up — the design-system dialog spec's
`medium` size. Below sm it remains a full-width bottom sheet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): add dashed rule between aside discussion and participants

The discussion module and the participants section shared near-identical
titles with only a small gap, blurring the seam between two distinct aside
fields. Drop the existing HorizontalRule (dashed) between them on desktop,
with symmetric 16px breathing room above (discussion padding) and below
(participants margin-top).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): match aside seam rule colour to the article-feed separators

The HorizontalRule used --color-line-grey-light (8% black), noticeably
lighter than the article list's dashed #ddd separators. Replace it with a
dashed top border on the participants section using the same
border-top-grey-light (#ddd) mixin the List uses, so both rules match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): logged-in discussion polish (spacing, alignment, centering) (#5980)

* fix(campaign): logged-in discussion polish (spacing, alignment, centering)

Issues found once testing the logged-in discussion on ICU:
- centre the "view all N comments" link in the module
- restore a gap below the comment box (the inline-footer variant had
  margin-bottom:0, gluing the first comment to the box) and compact the
  editor min-height inside that box (scoped via the global u-content-comment
  class so 圍爐 is untouched)
- align 24px-avatar reply text under the author name (the .contentContainer
  indent was sized for the 32px avatar) — scoped to campaignDiscussion

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): left-align discussion "view all" + stop reply name wrapping

- revert the centered "view all N comments" link back to left-aligned, matching
  the site's ViewMoreComment convention (text-align: start); nothing on the
  site centers this line
- pass nameNoWrap to the comment author for campaign discussion so the
  display name + @id stay on one line; in the indented reply column they
  otherwise wrap to two lines and the name↔id gap looks cramped

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): over-limit counter turns red + smaller submit label

- the counter used var(--color-red), which is undefined, so it never turned
  red past the limit; use --color-negative-red, the site-wide form-error red
  (ArticleCommentForm / Form.Field use the same)
- the campaign submit label was 15px; drop to 14px to match the site's comment
  submit buttons (ArticleCommentForm), scoped so circle forms keep their size

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: retrigger CI/Vercel (flaky codegen schema fetch, not a code change)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: retrigger CI/Vercel (backend recovered)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* feat(agent): add the basic rule for different models

* Add NCC compliance public pages

* feat(campaign): show the quote wall band even when empty (post-a-quote prompt) (#5981)

* feat(campaign): show the quote wall band even when empty, as a prompt

The band returned null when the campaign had no quotes yet, so a freshly
started campaign showed no wall at all. Keep the band visible (with an
empty-state prompt inviting people to post the first quote) whenever the
campaign has the wall enabled (enableQuoteWall); the legacy module/chip
entries still hide when empty.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): correct the quote-wall empty-state message id to its hash

formatjs/enforce-id requires the id to equal the content hash; the manual
id failed CI lint. Use the extractor's id (md2Ml3).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): empty quote wall uses an invitation card, not plain text

Replace the plain one-line empty state with an "invitation card" shaped like
a real quote card (left green rule, soft green fill) — it keeps the wall's
card feel without showing any fake quote, and reads as an honest prompt:
"During the event the quotes people pick will appear here. Pick a line you
love and put it on the wall."

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): align discussion title to cover top + full-width empty wall card

- drop the discussion module's top padding so the "討論區" title lines up with
  the cover top in the main column (the aside already supplies the top margin)
- the empty quote-wall invitation card spans the full centre column (matching
  the article list) instead of a half-width card

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): redesign campaign quote wall — green-rule pull-quotes, display-only (#5984)

* feat(campaign): redesign quote wall cards, admin-only retract, see-all link

- quote text → text15 (matches the campaign description)
- refined card: light fill, green quote mark, author/back-link split by a
  DS-compliant #ddd rule; drop the off-spec 2px green left rule
- retract is staff-only (viewer.isAdmin); posters/authors can't self-retract
- add a "see all quotes" pill in the band header → external museum wall; move
  the per-campaign "view all" dialog button below the cards
- even out the dashed-rule spacing between discussion and participants
- drop the now-unused QuoteCard index prop

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): refine quote-wall band cards

- join band cards into one strip: outer frame + per-card divider, no gaps
- make the whole card a stretched link to the source article; keep the
  admin-only retract row clickable above the overlay
- remove the "back to article" footer link
- match quote text to the campaign description (text15 / 1.733rem / grey-dark)
- drop the per-campaign "view all quotes" dialog button below the band,
  keeping only the top-right museum pill

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* style(campaign): match quote text to article feed summary

Quote text was still reading too large/airy next to the article feed
summary. Switch .quote from text15/1.733rem to text14/1.375rem to match
ArticleDigest/Feed .description exactly (colour already grey-dark).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): restore green-left-rule quote form, article-body type

Revert the quote cards from the grey filled box back to the original
pull-quote form: a 2px green left rule, no fill/border/radius, no ❝ mark.
Quote text now follows the article-body standard (--font-size-article-base
17px / --line-height-article-base 1.75 / --color-black, inheriting the body
sans). Band shows up to 3 per row (flex 0 1 15rem so 1-2 quotes don't
stretch); dialog masonry gets vertical spacing between rules.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* style(campaign): set quote text to campaign-description size (text15)

Article-body 17px read too large in the band; switch .quote to var(--text15)
(the campaign description size) while keeping the 1.75 line-height and #333.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(campaign): admin-only manage entry to retract quotes

Add a grey 'Manage quotes' pill in the band header, rendered only when
viewer.isAdmin, that opens the in-app quote-wall dialog where each quote
exposes a retract control. Normal users still see only the green 'See all
quotes' museum pill.

deleteQuote returns a bare boolean so Apollo can't evict the quote; refetch
all CampaignQuotes observers (band + dialog) on retract so the removed quote
and the quoteCount reconcile across the page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* refactor(campaign): make quote wall display-only, move moderation to OSS

Remove all in-app quote retraction from the campaign page: the admin
'Manage quotes' header button and the per-card retract control. The quote
wall is now purely a display surface; quote moderation (retract) will live
in the OSS admin console instead. Drops the now-unused deleteQuote wiring,
admin gating, and the related i18n messages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* style(campaign): thin the quote card green rule to 1px

Match the Matters left-rule convention (border-left-grey mixin = 1px); the
2px green rule read a touch heavy. Applies to the quote cards and the empty
invite card.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(campaign): point quote-wall see-all to the museum memo wall (#5985)

Update SEVEN_DAY_BOOK_QUOTE_WALL to the museum's memo wall path
(freewriting.matters.town/museum/memo-wall/, was /memo-wall). Covers both
the quote-wall 'See all quotes' pill and the in-app dialog museum link
(single constant).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* ci(format-check): add a PRs check for formatting

* feat: hide frozen user identity

* fix(i18n): 凍結用戶標示補繁中/簡中翻譯

#5988(frozen-user redaction)新增的「Account Frozen」(sE2Ui3) 與「Frozen user」(MeqJEO)
在 zh-Hant/zh-Hans 仍是英文。補上中文,與既有 archived「已註銷用戶/已注销用户」風格一致:

- Account Frozen(取代凍結用戶識別的 badge):帳號已凍結 / 账号已冻结
- Frozen user(凍結用戶個人頁):已凍結用戶 / 已冻结用户

compiled-lang 為 gitignored,build/CI 重新 compile,故只改 lang/*.json。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(notice): redact frozen actors as '已凍結用戶' (mirror archived)

#3 follow-up: in comment/notification notices, a frozen user's name now shows
'Frozen user' (MeqJEO → 已凍結用戶), mirroring the existing archived case
('Account Archived' → 已註銷用戶) in NoticeActorName. Reuses the existing MeqJEO
message (already translated) and the archivedDisplayname style; no fragment change
(status.state already selected).

* feat(quote): 金句圖改版(ICU 底)— 4 色、昭源宋體、上下引號、官方字標、QR (#5996)

* feat(quote): redesign quote image on ICU base — 4 colors, Chiron Sung HK

- keep 4 of the ICU styles (Cream / Pine / Mint / Slate); drop the rest
- unify the quote font to 昭源宋體 Chiron Sung HK (bundled OFL-1.1 subset);
  author + title share the same serif; await fonts before capture
- decorate the quote with opening + closing marks (上下引號)
- move the article title below the author, wrapped in 〈〉
- footer logo: official Matters lettering (general) / 七日書 logo, smaller;
  QR sits lower on the 4:5 portrait
- sizes: keep 1:1 + 4:5 only
- i18n: zh-Hant / zh-Hans for the dialog UI and style names
- add presets unit test

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(quote): align closing mark, author–title spacing, unify footer buttons

- pull the closing quote to the right edge (fullwidth mark ink sits left)
- larger gap between author and the 〈title〉
- unify the three footer buttons to greyDarker (matters-web dialog convention
  uses grey for footer actions; green is reserved for a single primary)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(quote): footer action buttons use brand green, not grey

Action buttons follow the brand primary color per design-system (new DS =
purple #7258FF; matters-web still on legacy green). Grey is for secondary
actions, so the three affirmative actions unify to green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(quote): larger quote sizes; Slate → Charcoal dark background

- bump fitFontSize scale (longest quote 42→50px); shrink the decorative
  quote marks to keep long quotes inside the safe area
- replace the light Slate style with a dark Charcoal (#1f2023, white text)
- i18n: 炭黑 for zh-Hant/zh-Hans

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(quote): restore closing mark; enlarge marks, author, title

- the closing quote was clipped by a negative margin; align it right instead
- scale marks (60→80), author (40→46), title (28→32) to match the larger quote
- trim the footer safe-area reserve so long quotes still fit

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(quote): size-aware font so square doesn't clip; symmetric closing mark

- fitFontSize now depends on the canvas: portrait keeps the larger scale,
  square uses a smaller one so long quotes fit (opening mark no longer clipped)
- render the closing mark as a horizontally-mirrored opening glyph so it
  aligns to the paragraph's right edge, symmetric with the opening

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(quote): closing mark mirrors the glyph in place (no longer clipped)

The previous scaleX flip pivoted on the right edge and pushed the glyph past
.inner's clip box, hiding it. Wrap the glyph in an inline-block and mirror
that instead — it stays in bounds and its right edge matches the quote's
right edge (verified: openΔ=0, closeΔ=0 across sizes).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(quote): dark style is Espresso (#2b2620) instead of Charcoal

Warmer brown-black with a gold accent shared with Cream; Charcoal read
too black. i18n: 深咖.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(quote): drop the daily-quota toast (limit removed server-side)

matters-server#4867 removed the per-article and daily putQuote limits, so the
ACTION_LIMIT_EXCEEDED branch (D8FJf9) is dead code — fall back to the generic
failure message and drop the now-unused ERROR_CODES import.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore(campaign): point quote-wall see-all to museum #memo-wall anchor (#5997)

The museum memo wall moved from its own page (/museum/memo-wall/) to an
anchor section on the museum page (/museum/#memo-wall). Update
SEVEN_DAY_BOOK_QUOTE_WALL accordingly.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* fix(campaign): order the quote-wall band newest-first (#5998)

The band fetched a random sample (random: true). Switch to random: false so
the backend orders by id desc, i.e. the most recently posted quotes show
first — matching the expectation that the newest quote leads the wall.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* Add UGC nofollow render guard

* chore: bump @matters/matters-editor to 0.3.3

The npm publish for 0.3.2/0.3.3 had been failing since PR thematters/matters-editor#525
merged, due to a stale NPM_AUTH_TOKEN secret (last rotated 2020-06-19). The token was
rotated and the Publish workflow rerun successfully; npm dist-tag latest is now 0.3.3.

* fix: filter restricted author comments in public UI

* feat(quote-image): 上牆成功頁「回活動頁」+社群分享選單 (#6004)

* feat(quote-image): success screen with return-to-campaign, and social share menu

- After posting to the quote wall, replace the toast with an in-dialog success
  screen: a check, a confirmation naming the campaign, and a "Go to the event
  page" button linking to /e/{shortHash}.
- Replace the image-share button with the existing ShareDialog so "Share" opens
  the social menu (X / Facebook / LINE / Threads / Telegram / copy link) sharing
  the article link; the quote image stays on "Download" / native share.
- Add getQuoteWallCampaign() and pass the wall campaign into the dialog from
  TextSelectionPopover.
- Add zh-Hant / zh-Hans copy and unit + render tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(quote-image): share both the quote image and the article link

"Share" now hands off to the native share sheet with the quote image file and
the article URL together (mobile and Web Share Level 2 desktop browsers).
Browsers without file-share support fall back to downloading the image and
opening the link share menu, with a toast explaining how to attach it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(quote-image): remove the Share button from the quote dialog

Web share intents can't attach the generated image to a social post, and the
app already has a dedicated article-share menu, so the Share button here was
redundant. Keep Download for the image and Post to wall. Drops the native
share / ShareDialog wiring added earlier on this branch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* style(quote-image): prettier-format Complete.tsx

Fix the format-check CI job — the file was committed with --no-verify, so the
pre-commit formatter was skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

* chore: retrigger Vercel deployment

* fix: restore develop dependencies and sync lockfile after back-merge

The package.json conflict resolution dropped develop's quote-image deps
(html-to-image, qrcode, @types/qrcode) and left the lockfile version at
6.11.2 while package.json says 6.11.3 — npm ci hard-fails on the
mismatch, which is what broke the Vercel deployments (GH Actions masked
it via the node_modules cache).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: yingshinlee <8070998+yingshinlee@users.noreply.github.com>
Co-authored-by: Zeck Li <11781254+zeckli@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant