framework-ui-internals
Внутрішні правила client/ui-kit — чому тема перебиває daisyUI, як не зламати граф чанків, пастки Lit і TypeScript у базових класах, де проходить межа між…
Skill by IgorAIvanov
Chalk Labs
Need help deploying framework-ui-internals?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/igoraivanov-framework-ui-internals
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/framework-ui-internals
What's inside
- Skill name
framework-ui-internals- Description
- Внутрішні правила client/ui-kit — чому тема перебиває daisyUI, як не зламати граф чанків, пастки Lit і TypeScript у базових класах, де проходить межа між основою та нащадком. Застосовуй щоразу, коли правиш theme.css, базові класи (BaseUI, QueryTableBase, ModelListBase, ModelPickerBase) або компоненти ui-kit.
- License
- MIT
- Metadata
- audience: framework
- Instructions
- 226 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Внутрішнє життя client/ui-kit Скіл про **цей репозиторій**, а не про застосунок на фреймворку. У пакет `@altera/skills` не їде. Прикладні правила оформлення екранів — окремо, у [screen-design-rules](../screen-design-rules/SKILL.md). Тут зібране те, що вже одного разу коштувало пошуків. ## 1. Тема безшарова — вона перебиває все `client/styles/theme.css` написана **поза `@layer`** і підключається після Tailwind і daisyUI. Безшарове правило перебиває будь-який шар незалежно від специфічності. Звідси три наслідки, і кожен уже спрацьовував: **Пиши `background-color`, а не `background`.** Скорочення мовчки обнуляє `background-image`, а ним daisyUI малює частину компонента — так зникла стрілка в `.select`, і поле вибору стало не відрізнити від інпута. **Структурні змінні daisyUI треба оголошувати.** Компоненти (`checkbox`, `radio`, `toggle`) читають `--border`, `--size-selector` тощо **без фолбеків**: невизначена змінна анулює всю декларацію рамки, і разом з `appearance: none` контрол стає невидимим. Так зникали чекбокси. **Стани не приходять самі.** `.btn` і `.input` у темі задають `background` і `color` беззастережно — отже штатне оформлення `:disabled` з daisyUI до контрола не доходить взагалі. Кожен стан, який має бути видно, тема мусить описати сама. Це виявилося аж на скарзі «вимкнена кнопка не відрізняється від звичайної». **Варіант, названий у розмітці, теж не приходить.** `btn-ghost` (шар компонентів) і `text-error` (шар utilities) стояли на кнопці видалення рядка табличної частини з самого початку — і не діяли: `.btn` теми задає `background`, `border` і `color` беззастережно. Кнопка виглядала звичайною сірою, хоча код казав «без рамки, червона». Лікується як `btn-square`: правилом у темі із селектором з двох класів (`.btn.btn-ghost`), щоб виграти в самої `.btn`. Тобто **клас у розмітці — це намір, а не результат**: якщо тема чіпає ту саму властивість, варіант треба описати в темі. Друга половина того ж випадку варта окремої уваги: `text-error` так і лишився невиконаним — **навмисно**. Щойно його ввімкнули, у табличній частині вишикувалося двадцять червоних значків підряд, і червоне перестало означати «обережно». Мертвий клас у чужій розмітці — привід перевірити, чи його справді хотіли, а не привід механічно оживити. Правило: **усе, що має перебити тему, пиши в тому ж файлі нижче за неї**, а не класами в розмітці. І зворотний бік тієї ж сили — нею ж і користуються. Розмір іконок був розсипаний атрибутами `width`/`height` по двох десятках файлів (12, 13, 14 — хто як вирішив), тож «зробити іконки більшими» не виходило: правка одного місця нічого не міняла. Лікується одним правилом теми — `.btn > svg`, `.input > svg` з токеном `--icon-size`: **звичайна CSS-декларація сильніша за презентаційний атрибут завжди**, незалежно від специфічності. Атрибут лишається значенням для гліфа поза контролом (значок стану в колонці списку, іконка діалогу). Коли те саме число мусить жити у двох місцях, назви його в обох: `--icon-size` у темі й `ICON` в `icons.ts`. ## 2. Контраст рахують, а не дивляться Приглушені тони, підібрані на око на хорошому моніторі, систематично не дотягували: `text-base-content/50` — 2.82:1, `/40` — 2.22:1, рамка поля `#b8c3cc` — 1.79:1 при потрібних 3:1. Перед тим як міняти колір теми, порахуй пари «текст на фоні». Це десяток рядків у `deno eval` (відносна яскравість + `(L1+0.05)/(L2+0.05)`), і воно ловить те, чого око не бачить. Пороги: **4.5:1** звичайний текст, **3:1** великий текст, межі контролів і графіка (WCAG 1.4.11). Вимкнений контрол формально виведений з-під вимоги — але підпис кнопки й ЗНАЧЕННЯ поля це різні речі: значення в режимі перегляду читають, тож там усе одно 4.5. Перевіряй на **всіх** фонах, де текст трапляється: білому, зебрі (`#fbfcfd`) і рядку під курсором (`#dcebf8`) — останній найтемніший, і саме на ньому падає те, що пройшло на білому. ## 3. Граф чанків: `import type` стирається, значення — ні Найдорожча помилка цього розділу коштувала 36 kB на кожному відкритті діалога підбору: `ModelPickerBase` імпортував `listRootSchema`, `alignClass`, `cellStyle` **з `model-list-base.ts`** — значеннями. Через це чанк пікера тягнув чанк списку разом із побічно підключеним `<ui-group-tree>` і статичним `xlsx`. Правила: - **спільним модулем робиться те, що НЕ тягне поведінки** — типи й чисті функції (`table-contract.ts`), не класи й не компоненти; - **побічний імпорт (`import "./ui-component.ts"`) не вибивається tree-shaking ніколи** — він реєструє custom element, тобто має ефект; - основа табличних форм **не має права знати про компоненти ui-kit**. Саме тому фільтри не мають декларативних видів: умій `QueryTableBase` малювати `period`, вона б статично імпортувала `<ui-period>`, і за нього платив би кожен список і кожен пікер. Розмітку дає екран. Перевіряти — збіркою, а не міркуванням: ```bash deno task build:front grep -o 'from"[^"]*"' dist/assets/model-picker-base-*.js | sort -u ``` ## 4. Пастки Lit і TypeScript у базових класах **Ім'я protected-методу може зіткнутися з властивістю DOM.** `protected ariaSort(col)` не компілюється взагалі: `ariaSort` — властивість `ARIAMixin` на `HTMLElement`, і TS каже «defines instance member property, but extended class defines it as instance member function». Лікується приватним `#ariaSort`. Те саме чекає на будь-яке ім'я з `aria*`, `title`, `hidden`, `translate`. **Поле не можна перекрити гетером і навпаки.** Якщо основа оголошує `protected selectable = false` (полем — щоб екран міг написати `override selectable = true`), нащадок не може зробити з нього гетер. Коли значення залежить від властивості, що приходить пізніше (`multiple` у пікера) — присвоюй у `willUpdate()`. **Вміст `<svg>` будується тегом `svg`, а не `html`.** Тег `html` створює елементи в HTML-просторі імен, тож інтерпольований усередину `<svg>` шаблон `html` дає `<path>`, якого браузер не знає: ```ts
From IgorAIvanov/altera03, MIT.
More from IgorAIvanov/altera03
- 0.584score
typebox-model-schema
IgorAIvanov
Define the complete model schema using TypeBox as the single source of truth for backend validation, SQL contract documentation, and frontend form/list/picker…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-form-root
IgorAIvanov
Build a model edit form (and understand the shared $root data contract behind every list, picker and form) by extending BaseUI, seeding state from the TypeBox…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-feature-architecture
IgorAIvanov
Design or refactor a model into a feature-centered structure where frontend UI files and database SQL source live together under app/<family>/<model>.
SkillAFreshness: A★ 1Claude Code +9 - 0.575score
db-function-contract
IgorAIvanov
Define PostgreSQL function contracts for models that use List, Get, Save, Delete, and Lookup with JSONB payloads and JSONB results.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
model-command-access
IgorAIvanov
Declare the permission a model command requires in manifest.json (commands.access) so the runtime can enforce it.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
model-command-response
IgorAIvanov
Derive the exact shape of a model command's response before consuming it in a screen — never hand-write the interface from memory.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
daisyui
IgorAIvanov
Official daisyUI component library skill.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
screen-design-rules
IgorAIvanov
Visual and usability rules for drawing any application screen — density, colour tokens, disabled and read-only states, field widths, status marks, keyboard…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
altera-new-app
IgorAIvanov
Deploy a new application on the Altera framework into an empty directory — from scaffold to a working login screen — and verify that it actually runs.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
lit
IgorAIvanov
Rules and patterns for writing Lit Web Components correctly in this project.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
app-run-and-deploy
IgorAIvanov
Run the application in development or production, fill in .env, publish the schema to a local or remote database, put several instances on one machine, and…
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
document-tabular-section
IgorAIvanov
Build an editable tabular section (табличну частину) of a document — controls that fill the table cell flush with the grid, decimal columns with live totals —…
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 17, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/IgorAIvanov/altera03
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from IgorAIvanov
- 0.584score
model-feature-architecture
IgorAIvanov
Design or refactor a model into a feature-centered structure where frontend UI files and database SQL source live together under app/<family>/<model>.
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
typebox-model-schema
IgorAIvanov
Define the complete model schema using TypeBox as the single source of truth for backend validation, SQL contract documentation, and frontend form/list/picker…
SkillAFreshness: A★ 1Claude Code +9 - 0.584score
model-form-root
IgorAIvanov
Build a model edit form (and understand the shared $root data contract behind every list, picker and form) by extending BaseUI, seeding state from the TypeBox…
SkillAFreshness: A★ 1Claude Code +9 - 0.575score
db-function-contract
IgorAIvanov
Define PostgreSQL function contracts for models that use List, Get, Save, Delete, and Lookup with JSONB payloads and JSONB results.
SkillAFreshness: A★ 1Claude Code +9 - 0.547score
altera-new-app
IgorAIvanov
Deploy a new application on the Altera framework into an empty directory — from scaffold to a working login screen — and verify that it actually runs.
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
lit
IgorAIvanov
Rules and patterns for writing Lit Web Components correctly in this project.
SkillBFreshness: B★ 1Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get framework-ui-internals running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
framework-ui-internals skill. Agent Mart. https://agentmart.dev/skills/igoraivanov-framework-ui-internals (last updated 2026-10-24)