Skip to content

Amazing UI fallout#657

Open
coiseiw wants to merge 48 commits into
masterfrom
amazing-ui-fallout
Open

Amazing UI fallout#657
coiseiw wants to merge 48 commits into
masterfrom
amazing-ui-fallout

Conversation

@coiseiw
Copy link
Copy Markdown

@coiseiw coiseiw commented May 20, 2026

This is the PR for the fallout theme update

Updates Material form-field/snack-bar defaults; extracts header
into LayoutHeaderModule; drops removed AlertComponent/PaginationModule/
LoadingButtonDirective from shared barrels; preconnects design-system
fonts in index.html; adapts auth focus selector to the new input-text
wrapper.
HomeComponentsModule and TasksComponentsModule export the same
declarations as HomeModule/TasksModule but omit *RoutingModule
so other feature modules can embed <app-home> / <app-show-tasks>
without inheriting their route tables.
… guard, extra-actions slot

Adds isNumeric on HTTableColumn (right-aligns + tabular-nums on counts,
sizes, speeds, IDs, priorities) and applies it to agents/chunks/files/
hashes/hashlists/pretasks/super*/tasks/vouchers tables. Expands task
status rendering to handle COMPLETED and IDLE (was RUNNING-only).
Guards rowActionDelete against missing taskWrapperId. Adds ng-content
extra-actions projection slot in tasks-table; host: { class: 'block' }
on ht-table.
Theme tokens replace raw hex colors in pass-strenght; refactor
app-table to mat-card outlined; add styleUrls + host: { class: 'block' }
to several task components; align dynamicform field defaults with the
new app.module values; replace native alert() with AlertService in
tus upload; add TextFieldModule and ButtonsModule barrel imports.
Rename app-page-title test mocks to app-page; update validation
selectors to [data-testid="form-validation-error"]; add Symbol.iterator
to FileList mock; add MetadataService sender-settings title; sprinkle
?? defaults for stricter null checks.
Introduce a `readonly` + `linkTo` API on every <input-*> component so the
same building blocks can render display-only values, replacing the
parallel <simulate-form-field*> shells.

- readonly: re-skins the field via `.input--readonly` (full opacity,
  `--well` background, no edit affordances, no required-marker, default
  cursor). Distinct from `disabled` semantically: readable/selectable
  value display, not a locked form participant.
- linkTo: wraps the label text in a routerLink for cross-record
  navigation. Requires RouterModule in the InputModule.

Also refactor color.component to host the random-color button via
matSuffix inside the form field instead of a sibling flex wrapper, and
flex-center the inline help icon in checkbox labels so optical
alignment no longer depends on font metrics.
The <simulate-form-field> and <simulate-form-field-multi> components
were parallel display-only shells that mirrored the field-stack layout
of the real inputs. Now that <input-*> components accept `readonly`
and `linkTo`, those shells are redundant.

- Delete simulate-form-field{,-multi}; drop them from GridModule.
- Migrate all consumers (edit-agent, view-health-check, edit-hashlist,
  import-cracked-hashes, edit-users, edit-tasks) to <input-text> or
  <input-multiselect> with `[readonly]="true"` and `[linkTo]` where the
  legacy `routerLink` input was used.
- Remove the now-unused `.simulate-form-field*` styles from _card.scss.

One source of truth for "labelled field" rendering, editable or not.
The new-tasks "Help" icon and the edit-tasks "Assign agent" / "Reload"
icons were positioned via per-page flex containers (`.form-section__cmd`
and `.custom-agent-container`), each with its own baseline-alignment
quirks (the 22px magic margin, hiding the form-field subscript so
flex-end on the row aligned with the input).

Project these as `matSuffix` children of <input-text-area> and
<input-multiselect> instead — Material already aligns suffixes
correctly against the input baseline, so both container styles and
their magic offsets can go.
Replace the hardcoded #00ff00 / #ff0000 / #ffff00 / #c0c0c0 fills in
task-visual with `--visual-graph-{cracked,error,no-crack,not-processed}`
tokens that alias to the existing semantic status tokens.

Domain-specific aliasing (rather than reading --status-* directly) lets
the graph retune in isolation without disturbing other --status-*
consumers, and keeps the canvas in sync with light/dark theme flips.

Also drop the long-dead commented-out conditional branches that mirrored
the cracked/not-processed fills.
The Next / Back / Finish buttons in the new-agent stepper sat
left-aligned in raw <div>s. Add `flex gap-sm justify-end` to all three
action rows so they cluster at the right edge with consistent spacing,
matching the action-row pattern used elsewhere.
The prior commit themed task-visual.component.ts via new
--visual-graph-* tokens, but that component is only mounted in
Storybook. The production hover-preview rendered by ht-table-type-link
fetches a server-rendered PNG from /api/v2/helper/getTaskProgressImage
in the hashtopolis-server repo, whose colors are hardcoded in PHP
(GD's imagecolorallocate). The token plumbing had no user-visible
effect, so undo it to keep the design system free of unused tokens.
Lift the `.light-theme` and `.dark-theme` CSS variable blocks out of
base/_tokens.scss into dedicated sibling stylesheets and `@use` them
from theme.scss. base/_tokens.scss now holds only theme-agnostic
tokens (primitives, geometry, motion, typography bindings, semantic
baselines on :root), making the theming a self-contained trio of
theme.scss + light.scss + dark.scss.
Both call sites passed `width: '100%'` to MatDialog.open, which
overrides Material's default max-width and stretches the panel
edge-to-edge so its built-in centering is no longer visible.

- HashtypeDetectorComponent (Create Hashlist help): 720px / 90vw
- ModalPretasksComponent (Edit Subtasks from supertasks table):
  80vw / 80vw, matching the sibling ModalSubtasksComponent
Wrap the matSuffix ng-content in a span that stops click propagation so
buttons projected into the suffix slot (e.g. browse/add) don't bubble up
to the multiselect's wrapping form-field and reopen the autocomplete panel.
Open the cheatsheet help dialog with width 840px / maxWidth 90vw so it
centers consistently with the other help and pretasks dialogs.
Switch the dialog container surface (in both the design-system shell rule
and the Material token block) from --card to --popover. --card is
intentionally translucent in dark mode so it can sit on the page
background; dialogs overlay arbitrary content above a dim backdrop and
need a solid floating-surface token, otherwise the backdrop bleeds
through the surface.
The compact form-field rules pin the filled wrapper, flex container, and
infix to 36px so labelless single-line inputs line up. Textareas need to
grow with their content, so opt them out via :has(textarea.custom-textarea)
and let cdkTextareaAutosize plus the textarea's own min-height drive the
field height.
Material's horizontal connector defaults to `margin: 0 -16px`, bleeding
the line 16px into each adjacent step header. Combined with the hover
state-layer's rounded rect, the line visibly punctures the rect's side
wall. Replace the negative margin with a small positive one so the line
endpoints sit just clear of the rect.

Also opt .mat-step-header out of the global :focus-visible outline. The
global 2px outline at 2px offset draws a second rectangle 4px outside
the header and reproduces the same overshoot — Material's own internal
focus indicator is enough.
Switches the host to flex-wrap with start justification so children sit
at their natural width instead of being stretched across grid tracks.
Useful for rows of checkboxes where the default grid would push items
awkwardly far apart.
Replaces ad-hoc flex-wrap divs and misapplied [columns] grids around
checkbox groups in edit-agent, edit-tasks, import-supertasks (masks,
wrbulk), new-tasks, and new-preconfigured-tasks. edit-tasks also splits
its mixed number/checkbox row into a 4-column number row plus a left-
aligned checkbox row so the inputs no longer share misleading track
widths.
Introduces a token-driven divider with faint/default/strong variants
and horizontal/vertical orientations, plus a Storybook showcase.
Adopted in new-files, new-hashlist, new-tasks and report-builder so
separators pick up theme border tokens instead of relying on UA <hr>
styling or inline Tailwind utility classes.
correct-horse-battery-bench and others added 15 commits May 15, 2026 10:52
Drops the wrapper <div> and the fluid-component @apply so the host
contributes no layout box. The inner span carries the destructive
color directly, removing the [class.text-destructive]="hasErrors"
binding that was always true inside the @if block.
Add OverflowTooltipDirective and wire it into the dynamic form so long
field and checkbox labels stay on one line, ellipsize, and reveal their
full text via Material tooltip only when actually truncated. Keeps
paired card sections at matching row heights across config tabs.
Drop the optional `target` selector input and the `measuredElement`
indirection. All current consumers measure the host element directly,
so the descendant-lookup escape hatch is dead code.
Introduces a `fullWidth` flag on MetadataFormField that makes a cell
span the full grid row via `.custom-form__cell--full`. Applied to the
"Enable Hashcat Brain" checkbox so the row-following fields don't
crowd against the narrow checkbox in the next column.
Tighten the brand pill (52→44px, padding 4px 6px→4px) and shrink the
logo cap (44→36px) to match the smaller container. In dark mode the
logo flips to the red devedis variant; add a solid white pill behind
it so the red mark keeps contrast on the near-black header surface.
Color-only override — geometry stays in the theme-agnostic block.
Step the shared subtitle one size up so it reads as a clear section
heading under the page title rather than competing with body text.
Let a parent page own the large title (e.g. tabbed Settings page) by
hiding the dynamic form's own <app-page> wrapper. When opted out, the
form's title renders inline as a smaller subtitle inside the section.
Uppercase + 0.08em tracking already mark this row as a label, so size
sits one step below the per-card subtitle to keep clear hierarchy
between page subtitle, section label and field.
The tabbed Settings screen now owns the "Settings" page title; the
inner dynamic form opts out of its own wrapper so each tab renders
under the same heading instead of duplicating it per form.
Replace the raw <h2> with the shared <app-page-subtitle> so the
"Database tools" heading matches the rest of the Settings tabs.
Drop the .item horizontal padding so action buttons stay flush with
the subtitle at the card's natural left edge.
@correct-horse-battery-bench correct-horse-battery-bench changed the base branch from master to 1974-ui-cleanup-and-design-system-usage-before-release May 20, 2026 13:20
coiseiw added 2 commits May 22, 2026 10:18
…create theme. Modification of the docker compose to mount a dedicated volume for the front-end to host the custom css files.
Base automatically changed from 1974-ui-cleanup-and-design-system-usage-before-release to master May 22, 2026 12:19
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.

2 participants