Publish scoped package as public - #525
Merged
Merged
Conversation
3 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
--access publicto thenpm publish ./dist --tag latestcommand for the scoped@matters/matters-editorpackage.Context
#524 fixed the missing explicit
latesttag, but the next master publish still failed with npm 404 because scoped packages need public access specified during publish.Validation
git diff --checknpm run lintnpm test