feat: remove Admin and Settings navigation items from sidebar. #390
- Remove Admin and Settings items from Navbar.svelte
- Remove Admin and Settings items from MobileNav.svelte
- Remove AdminIcon and SettingIcon exports from index.js
refactor(upload-button): fetch themes dynamically from Directus instead of hardcoding. #382
- Add themes fetch in load() using groupBy on footguard_articles
- Pass themes as prop to UploadArticleButton from +page.svelte
- Remove hardcoded THEMES constant from component
feat(research): add upload article button and server action. #382
- Add UploadArticleButton component with file picker, PDF validation,
loading state, and success/error feedback
- Add uploadArticle server action in +page.server.js with role guard,
file validation, and Directus file upload integration
- Pass userRole from load() to page for conditional button rendering
feat(research): add PDF upload for super admins. #382
- Add UploadArticleButton component with file picker and PDF validation
- Add uploadArticle server action with role guard (super_admin only)
- Add Directus file upload and article record helpers in lib/server
- Pass userRole from load() to page for conditional button rendering
refactor: remove toAppHref helper and use resolve directly #367
Remove the toAppHref helper function and the linkHref derived. Pass href directly to resolve() since the base path handling is no longer needed.
docs: document CreateGroupModal and AddGroupButton components #374
Add section 4 for the Groups page with full prop tables, no-JS behaviour notes, BEM class references, and usage examples for CreateGroupModal and AddGroupButton.
feat: add CreateGroupModal with admin-only open/close flow #374
Import CreateGroupModal and wire open/close to showCreateGroupModal state and URL (?create-new-group) via goto. Show AddGroupButton and CreateGroupModal only when data.isAdmin is true.
feat: add condition label field to create group form #381
Add a required condition label input above the submit button so users can set the group's condition label when creating a new group.
feat: add CloseIcon SVG component #381
Add a reusable X/close SVG icon with configurable width and height props, currentColor stroke, and aria-hidden for accessibility.
feat: add CreateGroupModal component #381
Add a native dialog-based modal for creating a new group.
Uses showModal() with JS and falls back to the open attribute.bmits a GET form to /groups
out click and Escape key both trigger onClose.
Merge pull request #383 from fdnd-agency/382-bug-button-element-classes-use-wrong-bem-names
fix: update AddGroupButton to use correct BEM class names #382
fix: update AddGroupButton to use correct BEM class names #382
Replace .add-group-btn, .add-group-btn__text and .add-group-btn__icon with the global .button .button-primary .button-large .button-spread classes and correct BEM element names .button__text and .button__icon.
Bug: (profile/dashboard): restore user fallback data and improve name display. #364
- fixed dashboard greeting fallback from "Guest" to user name
- added email-based fallback user handling
- improved profile fallback rendering when Directus fetch fails
- normalized user name formatting from email
- cleaned up profile data loading logic
feat(groups): add createGroup backend action and reactive list update. #364
- Add createGroup() function to groups.js (POST to footguard_workgroups)
- Add createGroup form action to +page.server.js with server-side validation
- Update +page.svelte to append new group reactively via extraGroups without page reload
refactor: rename butto classes to BEM modifier syntax #373
Rename .button-text and .button-icon to .button__text and .button__icon to follow BEM element naming convention.
refactor: shorten button system comment block
Replace the long multi-line comment above .button with a single short reference line pointing to Button.svelte and docs/components.md.
refactor: simplify AddGroupButton with svelte:element and resolve #367
Replace the {#if}/{:else} block with a single svelte:element
Add resolve() for the href.
refactor: use global button classes from styleguide #367
Replace all custom .add-group-btn styles with the global .button .button-primary .button-large .button-spread classes. Remove the local <style> block entirely.
refactor: move styles to global styleguide, add variant/size props #371
Removes all scoped styles from Button.svelte and moves them to the
global .button system in styleguide.css. The component now just applies
the right class names based on props.
Changes:
- Removed all scoped <style> from Button.svelte — visual styles now
live in styleguide.css
- Added variant prop (primary | secondary | outline | danger,
default: primary)
- Added size prop (small | medium | large, default: medium)
style: add global button system and typography tokens to styleguide #371
- Added --font-weight-500 and --line-height-tight tokens to :root
- Added .button base class with shared layout, transitions, disabled
state, and focus-visible ring via --btn-focus custom property
- Sizes: .button-small, .button-medium, .button-large
- Layout extras: .button-full-width, .button-spread (label left,
icon right with auto margin)
- Inner slots: .button-text (truncates with ellipsis), .button-icon
(flex-aligned SVG wrapper)
- Variants:
- .button-primary: blue filled with lift on hover
- .button-secondary: white with grey border, auto width on desktop
- .button-outline: transparent with blue border