Commit graph

44 commits

Author SHA1 Message Date
Virgil
fd1f7cea74 feat(html): add hidden helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 19:51:26 +00:00
Virgil
cafa24163d feat(html): add aria checked helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 19:41:09 +00:00
Virgil
94eb419914 feat(html): add aria invalid and required helpers
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 19:38:02 +00:00
Virgil
3c64352a3b fix(html): trim helper tokens
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 19:31:54 +00:00
Virgil
cb75de9bf3 feat(html): isolate text translation fallback
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 19:22:48 +00:00
Virgil
2ce8876cb5 fix(html): ignore empty helper tokens
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Drop empty strings from join-based accessibility helpers and class names so generated attributes stay clean.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:59:24 +00:00
Virgil
1958cc79b1 docs(html): align public API docs with AX principles
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:53:50 +00:00
Virgil
7b95c1fc74 feat(html): add aria-description helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:51:28 +00:00
Virgil
3d841efa12 feat(html): add aria-live helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:46:36 +00:00
Virgil
667965da19 feat(html): add aria-busy helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:44:10 +00:00
Virgil
30f64a3d59 feat(html): add aria state helpers
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:34:00 +00:00
Virgil
a7433675ba feat(html): add AltText helper alias
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:30:49 +00:00
Virgil
7091a5f341 feat(html): add aria-disabled helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:28:49 +00:00
Virgil
ec18122233 feat(html): add aria-current helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:25:09 +00:00
Virgil
a5e02f6472 feat(html): add class helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:21:16 +00:00
Virgil
a925142e4e feat(html): add aria-controls helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:18:30 +00:00
Virgil
ec2ccc7653 feat(html): add aria-expanded helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:15:48 +00:00
Virgil
ae286563fd fix(html): normalise nil render context
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 18:05:06 +00:00
Virgil
aa282056fa feat(html): preserve nested block paths through elements
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:58:21 +00:00
Virgil
d0e7f60dab feat(html): add dir helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Add a Dir convenience helper for the dir attribute so RTL/text-direction markup can be applied without raw Attr calls.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:42:50 +00:00
Virgil
4d767fa0bd fix(html): omit aria-hidden when visible
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:39:54 +00:00
Virgil
f8558a52ef feat(html): add lang helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:28:27 +00:00
Virgil
c84bd21cf4 docs: align html API comments with AX guidance
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:23:37 +00:00
Virgil
a86c8ef770 feat(html): recurse attrs through iterator wrappers
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:20:17 +00:00
Virgil
264ecc3f84 feat(html): add aria-labelledby helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:16:39 +00:00
Virgil
25d809fc88 feat(html): add aria-describedby helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:11:51 +00:00
Virgil
f7843ae180 feat(html): add autofocus helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:09:10 +00:00
Virgil
7814f669fd feat(html): add role accessibility helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:03:23 +00:00
Virgil
46a8b7e904 fix(html): harden nil rendering paths
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 17:00:58 +00:00
Virgil
8dfce51659 fix(html): preserve each path prefixes
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:58:12 +00:00
Virgil
ba384aeb12 fix: add nil-safe rendering paths
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:55:48 +00:00
Virgil
8bf49c8935 fix(html): preserve nested layout paths through wrappers
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:39:34 +00:00
Virgil
149d31b140 feat(html): add tabindex helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:31:22 +00:00
Virgil
48884f7974 feat(html): add aria-hidden helper
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:29:33 +00:00
Virgil
739f1f52fc feat(html): add accessibility helpers
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-03 16:26:46 +00:00
Snider
c525437ed6 refactor(module): migrate module path from forge.lthn.ai to dappco.re
Some checks failed
Security Scan / security (pull_request) Successful in 9s
Test / test (pull_request) Failing after 20s
Update module path from forge.lthn.ai/core/go-html to dappco.re/go/core/html.
Migrate all .go import paths, update dependency versions (core v0.5.0,
log v0.1.0, io v0.2.0), and add replace directives for local development.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-22 01:28:30 +00:00
Snider
2d16ce9d69 fix(conventions): alias stdlib io, add interface checks, use go-log
All checks were successful
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 1m34s
- Alias stdlib `io` as `goio` in cmd/codegen/main.go to follow project conventions
- Add compile-time Node interface checks for all node types in node.go
  and Layout in layout.go
- Replace fmt.Fprintf stderr logging with go-log in cmd/codegen/main.go
- Replace fmt.Println with go-log in cmd/wasm/register.go

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-15 16:40:39 +00:00
Snider
473fda5894 security: use html.EscapeString for XSS protection in rendering
All checks were successful
Security Scan / security (push) Successful in 9s
Test / test (push) Successful in 46s
Replace manual string-replace escaping with stdlib html.EscapeString.
Escape tag names and attribute keys in elNode and Layout rendering.
Improve Attr() to traverse wrapper nodes (If, Unless, Entitled).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 08:29:54 +00:00
Snider
78d5b45b0c feat: modernise to Go 1.26 — iterators, slices/maps, EachSeq
Some checks failed
Security Scan / security (push) Successful in 10s
Test / test (push) Failing after 36s
- Add EachSeq[T](iter.Seq[T], fn) for iterator-based template rendering
- Use slices.Collect(maps.Keys()) + slices.Sort for deterministic attr output
- Use strings.SplitSeq in codegen TagToClassName and path parsing
- Use range over int in layout and pipeline loops
- Refresh go.sum

Co-Authored-By: Gemini <noreply@google.com>
Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-23 05:11:22 +00:00
Claude
f49ddbf374
feat: add Attr() helper for setting element attributes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 00:08:17 +00:00
Claude
40da0d8b1d
fix: deterministic attributes and thread-safe nested layouts
Sort attribute keys for deterministic HTML output (I-1).
Clone nested layouts before mutating path in Render (I-3),
preventing data races when the same tree is rendered concurrently.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:53:31 +00:00
Claude
c7240943d7
feat: add conditional, entitlement, switch, and each nodes
Implements If, Unless, Entitled, Switch, and Each (generic) control flow
nodes. Entitled uses deny-by-default when no entitlement function is set,
rendering absent content rather than hidden content. Each uses Go generics
for type-safe iteration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:36:54 +00:00
Claude
3e76e72cb7
feat: add Text node with go-i18n grammar pipeline
Introduces textNode that renders through go-i18n's T() function with
automatic HTML escaping for safe-by-default output. Adds escapeHTML
utility, NewContextWithService for explicit service binding, and
Entitlements field on Context for upcoming conditional rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:35:50 +00:00
Claude
d7bb0b2b2c
feat: scaffold go-html module with Node interface
Introduces the go-html module with a Node rendering interface, Raw and El
constructors, void element handling, and attribute escaping. Includes a
minimal Context stub and tests for all node types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:34:27 +00:00