Skip to content

Feature v0.11.0 Merge#143

Merged
StanBarrows merged 104 commits intomainfrom
feature-v0.11.0-merge
Mar 16, 2026
Merged

Feature v0.11.0 Merge#143
StanBarrows merged 104 commits intomainfrom
feature-v0.11.0-merge

Conversation

@StanBarrows
Copy link
Contributor

No description provided.

Onatcer and others added 30 commits December 2, 2025 13:30
Onatcer and others added 25 commits February 18, 2026 16:45
add request classes and fix collection typing for clients, tasks and tags
this is a trade-off where for non grid aligned entries, the cursor position is a bit off, but data and visual are stil in sync. otherwise fc overrides height on drag, causing flickers.
the synced snapDuration cause incorrect noops on updates f.e. 15:55-16:00 on a 15 minute snap
Added a warning about AI slop pull requests and potential bans.
Copilot AI review requested due to automatic review settings March 16, 2026 13:50
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR merges the v0.11.0 feature work, updating the frontend UI patterns (field components, table sorting/persistence, query-based data loading), enhancing reporting/dashboard UX, and modernizing backend/API behaviors and E2E infrastructure.

Changes:

  • Migrate multiple Vue pages/components from Pinia store fetches and ad-hoc inputs to query-based hooks and shared Field/* UI primitives.
  • Add persistent client/member sorting state and sortable headings via TanStack Vue Table across multiple tables.
  • Improve backend request validation/filtering (including none sentinel support), add default API ordering, and upgrade Playwright CI to sharded blob reporting with Octane/FrankenPHP.

Reviewed changes

Copilot reviewed 202 out of 385 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
resources/js/Pages/ProjectShow.vue Switches project/members/tasks/org loading to query hooks; minor UI tweaks.
resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue Replaces label/error components with Field/* primitives.
resources/js/Pages/Profile/Partials/TwoFactorAuthenticationForm.vue Uses Field/* primitives for confirmation code UI.
resources/js/Pages/Profile/Partials/ThemeForm.vue Replaces native select with UI Select + Field/*.
resources/js/Pages/Profile/Partials/LogoutOtherBrowserSessionsForm.vue Uses Field/* error rendering.
resources/js/Pages/Profile/Partials/DeleteUserForm.vue Uses Field/* error rendering.
resources/js/Pages/Profile/Partials/ApiTokensForm.vue Uses Field/* and refines help text structure.
resources/js/Pages/Members.vue Persists member table sort state in storage and passes to table.
resources/js/Pages/Dashboard.vue Adjusts dashboard grid spacing.
resources/js/Pages/Clients.vue Moves to query hook + persistent sort state; removes search UI.
resources/js/Pages/Auth/TwoFactorChallenge.vue Uses Field/* primitives for auth challenge inputs.
resources/js/Pages/Auth/ResetPassword.vue Uses Field/* primitives for reset form inputs.
resources/js/Pages/Auth/Register.vue Uses Field/* primitives; refactors terms/newsletter layout.
resources/js/Pages/Auth/Login.vue Uses Field/* primitives for login inputs.
resources/js/Pages/Auth/ForgotPassword.vue Uses Field/* primitives for forgot password inputs.
resources/js/Pages/Auth/ConfirmPassword.vue Uses Field/* primitives for confirm password input.
resources/js/Pages/API/Partials/ApiTokenManager.vue Uses Field/* primitives for API token creation.
resources/js/Components/ui/tabs/TabsList.vue Updates TabsList styling classes.
resources/js/Components/ui/select/SelectTrigger.vue Expands SelectTrigger API (sizes/variants/chevron) and styling.
resources/js/Components/ui/number-field/NumberFieldInput.vue Adjusts number input sizing/typography classes.
resources/js/Components/ui/label/index.ts Adds barrel export for Label component.
resources/js/Components/ui/label/Label.vue Introduces reusable Label wrapper using reka-ui.
resources/js/Components/ui/dropdown-menu/DropdownMenuContent.vue Updates dropdown content border styling token.
resources/js/Components/ui/dialog/DialogContent.vue Improves dialog content layout and pointer-events behavior.
resources/js/Components/ui/calendar/CalendarDateInput.vue Switches popover imports; tweaks button props usage.
resources/js/Components/ui/calendar/CalendarCellTrigger.vue Updates selected-day styling tokens.
resources/js/Components/ui/calendar/CalendarCell.vue Replaces twMerge with cn for class merging.
resources/js/Components/ui/button/index.ts Removes legacy button component exports from this path.
resources/js/Components/ui/button/Button.vue Removes legacy Button component implementation.
resources/js/Components/ui/alert-dialog/AlertDialogCancel.vue Replaces twMerge with cn.
resources/js/Components/ui/alert-dialog/AlertDialogAction.vue Replaces twMerge with cn.
resources/js/Components/TimeTracker.vue Moves tracker data to query hooks; introduces new time entry query/mutations usage.
resources/js/Components/ResponsiveNavLink.vue Enables Inertia link prefetch.
resources/js/Components/NavigationSidebarLink.vue Enables Inertia link prefetch.
resources/js/Components/NavLink.vue Enables Inertia mount-prefetch for nav links.
resources/js/Components/DropdownLink.vue Enables Inertia link prefetch.
resources/js/Components/Dashboard/ThisWeekOverview.vue Adds staleTime to queries; tweaks chart axis; adds reporting table.
resources/js/Components/Dashboard/TeamActivityCardEntry.vue Updates spacing/typography styles.
resources/js/Components/Dashboard/TeamActivityCard.vue Adjusts empty/short list padding behavior.
resources/js/Components/Dashboard/RecentlyTrackedTasksCardEntry.vue Uses query hooks; tweaks layout; adjusts start/stop button props.
resources/js/Components/Dashboard/RecentlyTrackedTasksCard.vue Updates icon version; adjusts empty state spacing.
resources/js/Components/Dashboard/LastSevenDaysCard.vue Tightens TS types for placeholder data.
resources/js/Components/Dashboard/DayOverviewCardEntry.vue Updates spacing/typography classes.
resources/js/Components/Dashboard/DayOverviewCardChart.vue Simplifies axes visibility config.
resources/js/Components/Dashboard/DashboardCard.vue Updates wrapping/layout styling.
resources/js/Components/CurrentSidebarTimer.vue Uses secondary variant for start/stop control.
resources/js/Components/ConfirmsPassword.vue Uses Field/* primitives for password confirm input.
resources/js/Components/Common/User/UserTimezoneMismatchModal.vue Replaces bespoke modal with shared TimezoneMismatchModal wrapper.
resources/js/Components/Common/Task/TaskTableHeading.vue Updates heading typography colors.
resources/js/Components/Common/Task/TaskMultiselectDropdown.vue Moves to tasks query hook; adds submit event and “No Task” label.
resources/js/Components/Common/Task/TaskEditModal.vue Uses FieldGroup/Field/FieldLabel for task editing.
resources/js/Components/Common/Task/TaskCreateModal.vue Uses FieldGroup + new project trigger button UI for dropdown.
resources/js/Components/Common/Tag/TagTableRow.vue Adds edit flow and modal; gates options by update/delete permissions.
resources/js/Components/Common/Tag/TagTableHeading.vue Adds sortable heading rendering with chevrons.
resources/js/Components/Common/Tag/TagTable.vue Migrates tags to query hook; adds TanStack sorting and props-driven sort state.
resources/js/Components/Common/Tag/TagMoreOptionsDropdown.vue Adds “Edit” option and permission checks.
resources/js/Components/Common/Tag/TagEditModal.vue Adds tag editing modal component.
resources/js/Components/Common/TableHeading.vue Adjusts responsive font sizing class usage.
resources/js/Components/Common/TabBar/TabBarItem.vue Tweaks padding and line-height consistency.
resources/js/Components/Common/Reporting/ReportingTabNavbar.vue Refactors tabs into computed list with hover prefetch + model updates.
resources/js/Components/Common/Reporting/ReportingRow.vue Adds optional cost column support and adjusts layout.
resources/js/Components/Common/Reporting/ReportingRoundingControls.vue Migrates labels to Field; updates SelectTrigger sizing + button variant.
resources/js/Components/Common/Reporting/ReportingGroupBySelect.vue Replaces custom select dropdown with UI Select.
resources/js/Components/Common/Reporting/ReportingExportButton.vue Replaces custom dropdown with dropdown-menu primitives.
resources/js/Components/Common/Reporting/ReportingChart.vue Simplifies chart axis visibility config.
resources/js/Components/Common/Report/ReportTableRow.vue Adds created/expires columns with localized formatting; improves visibility display.
resources/js/Components/Common/Report/ReportTableHeading.vue Adds columns and updates heading styling.
resources/js/Components/Common/Report/ReportTable.vue Updates grid template and empty-state colspan.
resources/js/Components/Common/Report/ReportEditModal.vue Migrates to Field primitives; adds UTC/local conversion for expiration via computed.
resources/js/Components/Common/Report/ReportCreateModal.vue Adds query invalidation and redirect; converts public_until to UTC on submit.
resources/js/Components/Common/ProjectMember/ProjectMemberTableRow.vue Switches member loading to query hook.
resources/js/Components/Common/ProjectMember/ProjectMemberTableHeading.vue Updates heading typography colors.
resources/js/Components/Common/ProjectMember/ProjectMemberMoreOptionsDropdown.vue Switches member loading to query hook.
resources/js/Components/Common/ProjectMember/ProjectMemberEditModal.vue Migrates label usage to Field primitives.
resources/js/Components/Common/Project/constants.ts Adds NO_CLIENT_ID sentinel constant for filtering.
resources/js/Components/Common/Project/ProjectsFilterDropdown.vue Adds new project filtering dropdown (status + client selection).
resources/js/Components/Common/Project/ProjectTableRow.vue Switches to query hooks; adds status/billable columns; layout updates.
resources/js/Components/Common/Project/ProjectTableHeading.vue Adds sortable headings with chevrons for multiple columns.
resources/js/Components/Common/Project/ProjectStatusFilterBadge.vue Adds status filter badge component with dropdown behavior.
resources/js/Components/Common/Project/ProjectMultiselectDropdown.vue Switches to query hook; adds submit event and “No Project” label.
resources/js/Components/Common/Project/ProjectEditModal.vue Migrates to Field primitives and updates client dropdown trigger UI.
resources/js/Components/Common/Project/ProjectClientFilterBadge.vue Adds client filter badge component with multi-select dropdown.
resources/js/Components/Common/Project/BaseFilterBadge.vue Adds reusable filter badge wrapper with dropdown + remove action.
resources/js/Components/Common/PageTitle.vue Adjusts icon sizing responsiveness.
resources/js/Components/Common/Member/MemberTableRow.vue Updates icons and status rendering; removes forced refetch call.
resources/js/Components/Common/Member/MemberTableHeading.vue Adds sortable headings with chevrons.
resources/js/Components/Common/Member/MemberTable.vue Migrates to query hook; adds TanStack sorting and emits sort changes.
resources/js/Components/Common/Member/MemberRoleSelect.vue Replaces custom select dropdown with UI Select.
resources/js/Components/Common/Member/MemberMultiselectDropdown.vue Switches to query hook; adds submit event.
resources/js/Components/Common/Member/MemberMergeModal.vue Invalidates members query after merge.
resources/js/Components/Common/Member/MemberMakePlaceholderModal.vue Invalidates members query after deactivation.
resources/js/Components/Common/Member/MemberInviteModal.vue Uses Field/* primitives for invite form errors/labels.
resources/js/Components/Common/Member/MemberDeleteModal.vue Uses Field/* primitives; invalidates members query after delete.
resources/js/Components/Common/Member/MemberBillableSelect.vue Replaces custom select dropdown with UI Select.
resources/js/Components/Common/Invitation/InvitationTableHeading.vue Updates heading typography colors.
resources/js/Components/Common/Client/ClientTableRow.vue Adds status column; uses projects query; layout tweaks.
resources/js/Components/Common/Client/ClientTableHeading.vue Adds sortable headings with chevrons.
resources/js/Components/Common/Client/ClientTable.vue Adds TanStack sorting + project count derived from projects query.
resources/js/Components/Common/Client/ClientMultiselectDropdown.vue Switches to query hook; adds submit event and “No Client” label.
resources/js/Components/Common/Client/ClientCreateModal.vue Migrates label usage to Field primitives.
resources/js/Components/CommandPalette/index.ts Adds barrel export for CommandPaletteProvider.
playwright/fixtures.ts Adds API-based auth + admin/employee fixtures; reduces UI auth overhead.
playwright/config.ts Adds Mailpit base URL and shared test password constant.
playwright.config.ts Enables parallel workers, blob reporter in CI, and conditional Firefox project.
package.json Adds workspaces; upgrades several dependencies/devDependencies.
e2e/utils/tags.ts Switches to type-only Page import.
e2e/utils/table.ts Adds helper to extract ordered row names from a table locator.
e2e/utils/money.ts Switches to type-only NumberFormat import.
e2e/utils/mailpit.ts Adds Mailpit helpers to extract invitation/reset URLs.
e2e/utils/currentTimeEntry.ts Improves timer button targeting + assertions using test ids and visibility.
database/factories/UserFactory.php Adds import and simplifies @see reference for FileHelpers.
config/excel.php Uses imported DefaultValueBinder constant reference.
config/auth.php Imports User model and uses short class reference.
config/audit.php Imports resolver/model classes and uses short class references.
config/app.php Imports service providers and uses short class references in providers list.
bootstrap/app.php Imports core classes and uses short class references.
app/Service/TimeEntryService.php Fixes “round up” behavior to keep exact-boundary end times unchanged.
app/Service/TimeEntryFilter.php Adds none sentinel support for multiple filters (client/project/tag/task).
app/Service/ReportExport/CsvExport.php Imports CSV exception classes and updates @throws annotations.
app/Service/MemberService.php Sets placeholder user’s current_team_id during placeholder creation.
app/Service/Dto/ReportPropertiesDto.php Accepts none sentinel in ID collections; validates others as UUIDs.
app/Service/DashboardService.php Constrains weekly billable amount query by organization id.
app/Policies/OrganizationPolicy.php Updates authorization to use PermissionStore for org updates.
app/Models/Organization.php Simplifies return type to imported Jetstream Team.
app/Http/Resources/V1/Tag/TagCollection.php Implements PaginatedResourceCollection.
app/Http/Resources/V1/Client/ClientCollection.php Implements PaginatedResourceCollection.
app/Http/Requests/V1/TimeEntry/TimeEntryUpdateRequest.php Restricts project validation via permission-aware visibility constraints.
app/Http/Requests/V1/TimeEntry/TimeEntryUpdateMultipleRequest.php Restricts project validation via permission-aware visibility constraints.
app/Http/Requests/V1/TimeEntry/TimeEntryStoreRequest.php Restricts project validation via permission-aware visibility constraints.
app/Http/Requests/V1/TimeEntry/TimeEntryIndexRequest.php Allows none sentinel for *_ids with custom closure validation.
app/Http/Requests/V1/TimeEntry/TimeEntryIndexExportRequest.php Adds client_ids handling and none sentinel validation closures.
app/Http/Requests/V1/TimeEntry/TimeEntryAggregateRequest.php Allows none sentinel for *_ids with custom closure validation.
app/Http/Requests/V1/TimeEntry/TimeEntryAggregateExportRequest.php Allows none sentinel for *_ids with custom closure validation.
app/Http/Requests/V1/Task/TaskIndexRequest.php Adds pagination parameter validation.
app/Http/Requests/V1/Tag/TagIndexRequest.php Adds pagination parameter validation.
app/Http/Requests/V1/Report/ReportStoreRequest.php Allows none sentinel in report properties filter IDs.
app/Http/Requests/V1/Report/ReportIndexRequest.php Adds pagination parameter validation.
app/Http/Requests/V1/ProjectMember/ProjectMemberIndexRequest.php Adds pagination parameter validation.
app/Http/Requests/V1/Member/MemberMergeIntoRequest.php Updates phpdoc return type aliasing.
app/Http/Requests/V1/Member/MemberIndexRequest.php Adds pagination parameter validation.
app/Http/Requests/V1/Invitation/InvitationIndexRequest.php Adds pagination parameter validation.
app/Http/Middleware/RedirectIfAuthenticated.php Updates phpdoc closure signature formatting.
app/Http/Middleware/ForceJsonResponse.php Updates phpdoc closure signature formatting.
app/Http/Middleware/ForceHttps.php Updates phpdoc closure signature formatting.
app/Http/Kernel.php Replaces FQCN middleware references with imports and short class names.
app/Http/Controllers/Api/V1/TimeEntryController.php Uses imported Carbon type in signature.
app/Http/Controllers/Api/V1/TaskController.php Adds default ordering for task pagination.
app/Http/Controllers/Api/V1/TagController.php Adds index request (pagination validation).
app/Http/Controllers/Api/V1/ReportController.php Adds index request (pagination validation); allows updating public_until.
app/Http/Controllers/Api/V1/ProjectMemberController.php Adds index request + default ordering for pagination.
app/Http/Controllers/Api/V1/ProjectController.php Adds default ordering for project pagination.
app/Http/Controllers/Api/V1/MemberController.php Adds default ordering for member pagination.
app/Http/Controllers/Api/V1/InvitationController.php Adds default ordering for invitation pagination.
app/Http/Controllers/Api/V1/ChartController.php Increases tracked hours history window from 60 to 100 days.
app/Http/Controllers/Api/V1/ApiTokenController.php Adds default ordering for token listing.
app/Filament/Resources/UserResource.php Simplifies Filament component references.
app/Filament/Resources/TimeEntryResource/Pages/EditTimeEntry.php Maps selected member to user/org before save.
app/Filament/Resources/TimeEntryResource/Pages/CreateTimeEntry.php Maps selected member to user/org before create.
app/Filament/Resources/TimeEntryResource.php Changes selection to member_id and adds task_id field; simplifies columns.
app/Filament/Resources/ReportResource.php Simplifies Filament component references.
app/Filament/Resources/OrganizationResource/RelationManagers/UsersRelationManager.php Simplifies Filament component references.
app/Filament/Resources/OrganizationResource.php Simplifies Filament component references.
app/Filament/Resources/OrganizationInvitationResource.php Simplifies Filament component references.
app/Filament/Resources/FailedJobResource.php Fixes Filament Textarea component naming.
README.md Adds contribution policy language.
.github/workflows/playwright.yml Adds sharding, Mailpit, Octane/FrankenPHP server, blob report merge/upload.
.env.ci Configures SMTP via Mailpit in CI and sets Octane server variable.
Comments suppressed due to low confidence (1)

package.json:93

  • Several packages are bumped to major versions that were not released as of Aug 2025 (e.g., Vite 7, ECharts 6, Pinia 3, vue-echarts 8, vue-tsc 3). If these are intentional upgrades, double-check they exist, are compatible with your toolchain, and that the lockfile and CI environment are updated accordingly; otherwise installs may fail.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

'update:filters': [filters: ProjectFilters];
}>();

const statusOptions = [
Comment on lines +41 to +47
function updateStatus(status: 'active' | 'archived' | 'all') {
emit('update:filters', {
...props.filters,
status,
});
open.value = false;
}
Comment on lines +15 to +21
const props = defineProps<{
tag: Tag;
}>();

const tagBody = ref<UpdateTagBody>({
name: props.tag.name,
});
$report->share_secret = null;
$report->public_until = null;
}
} elseif ($report->is_public && $request->has('public_until')) {

class TimeEntryFilter
{
public const string NONE_VALUE = 'none';
Comment on lines 17 to 19
const projectCount = computed(() => {
return projects.value.filter((project) => project.client_id === props.client.id).length;
return projects.value.filter((projects) => projects.client_id === props.client.id).length;
});
Comment on lines 31 to 33
const projectTasksCount = computed(() => {
return tasks.value.filter((task) => task.project_id === props.project.id).length;
});
Comment on lines +27 to +31
class: _,
showChevron: __,
variant: ___,
active: ____,
size: _____,
@StanBarrows StanBarrows merged commit 05e7d40 into main Mar 16, 2026
10 checks passed
@StanBarrows StanBarrows deleted the feature-v0.11.0-merge branch March 16, 2026 14:43
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.

4 participants