* perf(assets): optimize TOC scroll tracking and collapse behavior
- Replace linear scan + getBoundingClientRect with cached offsets and binary search
- Add rAF throttle to syncTocActiveState for per-frame update limit
- Use diff-based has-active class updates to avoid visual flash
- Simplify collapse CSS (remove broken @supports grid-animation block)
- Replace scrollTop assignment with smooth scrollIntoView
* refactor(assets): replace template heading numbers with CSS counters
- Remove heading counter map and format logic from render-heading.html
- Add CSS counters for h2-h6 numbering via .heading-numbered::before
- Add CSS counters for TOC ol numbering via ::marker
- Use :has(:nth-child(10)) for adaptive ol padding by digit count
- Remove [params.heading.number.format] config (CSS uses fixed format)
* feat(layouts): add print button to sidebar TOC title
- Add print icon button next to TOC title text in sidebar
- Use event.stopPropagation() to prevent TOC toggle on click
- Add "print" i18n key to all 19 language files
- Style print button with secondary color and hover effect
* feat(layouts): add nav-dialog with tab switching for TOC and collections on mobile
Rename toc-dialog to nav-dialog and integrate collection list via
tab-element, so mobile users can switch between table of contents and
collection/series list in the drawer. Extract nav-dialog into a
dedicated partial. Add single.navigation i18n key for all languages.
* feat(collections): remove early exit for collections with less than two pages
* style(assets): add transition to collection-summary background-color
Add isRTL utility function in utils/dom.ts and expose it via CoreService
and window.fixit. Use isRTL to flip task list tooltip placement from
'right' to 'left' in RTL layouts.
SCSS now depends on Dart Sass (external) instead of Hugo Extended's
built-in LibSass, so the hugo.IsExtended check is no longer needed.
Also switches warnf to warnidf for encryption/pagefind warnings to
prevent duplicate messages.
Add a lightweight disclaimer notice at the beginning of articles to
indicate content origin (AI-generated, repost, original, custom).
- Add params.disclaimer config with enable, type, content options
- Support 4 types: ai, repost, original, custom
- Add custom SVG icons for ai/repost/original types
- Add i18n translations for 20 languages
- Add shimmer animation effect with RTL and reduce-motion support
* feat(i18n): add RTL support and Arabic/Persian translations
- Add `dir` attribute to `<html>` via `.Site.Language.Direction`
- Convert physical CSS properties to logical properties across ~30 SCSS files
- Add `[dir="rtl"]` overrides for elements that need physical direction (code blocks, translate, icons)
- Add `logical-direction.html` template function for config value normalization
- Add RTL-aware deprecation warnings for old "left"/"right" config values
- Rename github corner, TOC position, reading progress config values from "left"/"right" to "start"/"end"
- Add Arabic (ar.toml) and Persian (fa.toml) i18n translation files
- Update multilingual documentation with RTL language configuration guide
* feat(shortcodes): add RTL support for tabs and refactor border-radius mixin
- Rename tabs placement values from "left"/"right" to "start"/"end" with deprecation warnings
- Convert all physical directional properties in tabs SCSS to logical properties
- Add RTL overrides for translate and box-shadow in tabs
- Add "start"/"end" support to border-radius mixin using CSS logical properties
- Refactor fixit-decryptor to use border-radius(start/end) mixin
* feat(assets): add RTL support for toc-dialog slide animation
The mobile toc-dialog always slid in from the right (100vw). In RTL
mode it should slide from the left (-100vw), matching the
border-inline-start/margin-inline-end anchoring.
* feat(assets): add RTL support for post-tag comma separator
* refactor(assets): extract RTL styles into dedicated _rtl.scss
* feat(assets): add RTL support for theme-switch and directional icons
* feat(i18n): add RTL support and improve i18n
- Add RTL typography corrections for Arabic-script languages (:lang(ar/fa/ur))
- Remove fa-list-ol from RTL flip list (numbers get mirrored)
- Add Urdu translation file (i18n/ur.toml)
- Rename noMoretTranslations to noTranslations and simplify all translations
- Update json-viewer-element from 1.0.4 to 1.0.6
- Add RTL test posts (index.en.md, index.ar.md)
- Fix layout partials for RTL support
See https://fixit.lruihao.cn/docs/content-management/introduction/#rtl-language-support
Use getenv "HUGO_PARAMS_MENU_DRAFT" to control draft menu item visibility,
replacing the deprecated .Site.BuildDrafts (Hugo v0.156.0). (#702)
Also refactors menu range loops to use `continue` for reduced nesting.
Extract theme tokens, shortcuts, blocklist, safelist, and icon configuration
from uno.config.ts into a reusable workspace package at packages/unocss-preset/.
- Create @hugo-fixit/unocss-preset with presetFixIt and createFixItConfig()
- Simplify uno.config.ts to use createFixItConfig() with content/cli overrides
- Move unocss, @iconify/json from root devDependencies to preset package
- Update README warning to point to v1 migration guide
- Update version compatibility check for v1.0.0
- Remove temporary v1 development warning
- Update fixit-encrypt repository link in encrypt package README
Convert all TypeScript `private` and `private readonly` declarations to
ES6 `#` syntax for true runtime privacy. TypeScript's `private` keyword
only provides compile-time checking but fields remain accessible in
compiled JavaScript.
Add `{{/* ... */}}` header comments to 25 partials that had no documentation,
enabling `pnpm gen:docs` to generate their reference docs. Also fix
base/head/index.html leading blank line that prevented parser matching.
Groups covered: base/, feed/, function/, home/, init/, plugin/, single/, store/, (root).