Skip to content

release: 0.1.0 - #60

Merged
LESANF merged 17 commits into
masterfrom
0.1.0
Sep 22, 2026
Merged

LESANF merged 17 commits into
masterfrom
0.1.0

Conversation

@LESANF

@LESANF LESANF commented Sep 22, 2026

Copy link
Copy Markdown
Owner

Release 0.1.0 — structure and behavior ported from carhartt-kr-app: primitive/semantic color tokens with useColors(), Input wrapper structure with hint and slots, Button loading behavior, Icon base, UnderlineText/StrikethroughText, keyboard and debounce hooks, motion constants, dayjs and format helpers, import-path lint, and the color guardrail tests.

Consumers: see MIGRATION.md "v0.0.9 에서 올리기".

🤖 Generated with Claude Code

LESANF and others added 17 commits September 22, 2026 09:48
colors.css now holds the brand primitives under @theme static and
registers the semantic tokens; semantic.css light/dark values reference
primitives only. A new app changes the primitives and nothing else.
@theme static keeps variables that only JS reads in the bundle, so the
tab bar drops its fallback hex. Tab label colors become tokens read with
useCSSVariable so they follow the theme.

ESLint now fails on hex literals and Uniwind.getCSSVariable under src/;
remaining example screens are listed in LEGACY_HEX_FILES. The prompt hook
routes color questions to docs/colors-in-js.md, which records the
decision, the light-only variant, and the rejected alternatives.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
feat(styles): primitive color layer and JS color guardrails
colors.css holds only the brand primitives; semantic.css registers the
semantic tokens with light values and overrides them for dark. useColors
reads every token through one useCSSVariable subscription and follows the
theme, replacing the per-component reads and the tab-bar constant. ESLint
now also fails on useCSSVariable outside use-colors.ts. use-colors.test
checks token names, @theme static, and light/dark parity.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…alue

iOS hides the keyboard on background but keeps the input focused, so
tapping it after returning does nothing. Keyboard.dismiss() from the root
layout clears the focus; keyboard-controller's dismiss() runs a frame late
and has no effect here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
textDecorationLine cannot set thickness or color and lands differently on
iOS and Android. Both components draw the line as a view; the strikethrough
sits at 50% minus half its height with no per-platform offset.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The three ../ imports (root layout css entry, tab button, deep-link gates)
move to the alias. Same-folder ./ imports stay allowed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… dots

Adds textClassName for the label alone, clamps the label to one line,
skips the 60px Lottie for ghost/link so inline rows keep their layout,
and recolors the white Lottie asset per variant through colorFilters read
from useColors. The size variant and the template's shape are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The h-11 box, border and background move from the TextInput to the
wrapping view; the input keeps only font size (text-size-md, no line
height) so Android does not push glyphs below the line box and out of
alignment with the slots. Adds hint (shown when there is no error) and
left/right slots, drops editable from the props in favor of disabled.
Label and the template's shape stay.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Icon wraps the Svg and, when onPress is given, a Pressable with a 16pt
default hitSlop. Pressable comes from react-native directly: importing the
ui barrel from here creates a barrel/icons import cycle. The tab icons
move onto it; their SVG paths are unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
lib/dayjs applies DEFAULT_LANGUAGE from lib/i18n once; callers import it
instead of the dayjs package. formatUtils keeps only the locale-neutral
helpers (number, signedNumber, parseNumber, optional, compactJoin, and
date with a caller-supplied format). Currency, phone and address formats
belong to each app.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- eslint.config.test.ts: stdin 과 가상 경로로 규칙 발동을 확인한다. 픽스처 파일이 없어 Metro 를 건드리지 않는다
- ui 배럴의 StyledSvg 삭제 — 사용처가 없고 SVG 색은 useColors() 문자열로 넘긴다
- global-overlays 의 View 를 @/components/ui 에서 가져온다

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
feat: port structure and behavior from carhartt-kr-app
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@LESANF
LESANF merged commit 55a038a into master Sep 22, 2026
1 check passed
@LESANF
LESANF deleted the 0.1.0 branch September 22, 2026 05:33
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