{{ liveDataValue }}
@@ -44,7 +44,7 @@ const displaysPlaceholder = computed(() => {
data-testid="time_entry_description"
:value="liveDataValue"
placeholder="Add a description"
- class="absolute px-0 h-full min-w-0 pl-3 pr-1 left-0 top-0 w-full text-sm text-text-primary font-medium bg-transparent focus-visible:ring-0 rounded-lg border-0"
+ class="absolute px-0 h-full min-w-0 pl-1.5 @lg:pl-3 pr-1 left-0 top-0 w-full text-sm text-text-primary font-medium bg-transparent focus-visible:ring-0 rounded-lg border-0"
@blur="onChange"
@input="onInput"
@keydown.enter="onChange" />
diff --git a/resources/js/packages/ui/src/TimeEntry/TimeEntryMassActionRow.vue b/resources/js/packages/ui/src/TimeEntry/TimeEntryMassActionRow.vue
index cce49054..54a76b28 100644
--- a/resources/js/packages/ui/src/TimeEntry/TimeEntryMassActionRow.vue
+++ b/resources/js/packages/ui/src/TimeEntry/TimeEntryMassActionRow.vue
@@ -63,7 +63,7 @@ const showMassUpdateModal = ref(false);
:class="
twMerge(
props.class,
- 'text-sm py-1.5 font-medium flex border-b border-border-primary items-center space-x-3'
+ 'text-sm py-1.5 font-medium hidden sm:flex border-b border-border-primary items-center space-x-3'
)
">
-
+
+
-
+
{{ memberName }}
@@ -171,6 +174,58 @@ async function handleDeleteTimeEntry() {
@duplicate="duplicateTimeEntry"
@delete="deleteTimeEntry">
+
+
diff --git a/resources/js/packages/ui/src/TimeEntry/TimeEntryRowHeading.vue b/resources/js/packages/ui/src/TimeEntry/TimeEntryRowHeading.vue
index 0e88d4c8..4dc7bdcb 100644
--- a/resources/js/packages/ui/src/TimeEntry/TimeEntryRowHeading.vue
+++ b/resources/js/packages/ui/src/TimeEntry/TimeEntryRowHeading.vue
@@ -36,8 +36,8 @@ function selectUnselectAll(value: boolean) {
class="bg-background dark:bg-secondary border-b border-border-primary py-1 text-xs @sm:text-sm">
-
-
+
+
@@ -50,11 +50,11 @@ function selectUnselectAll(value: boolean) {
{{ formatWeekday(date) }}
-
+
{{ formatDate(date, organization?.date_format) }}
-
+
{{
formatHumanReadableDuration(
diff --git a/resources/js/packages/ui/src/TimeEntry/TimeEntryRowTagDropdown.vue b/resources/js/packages/ui/src/TimeEntry/TimeEntryRowTagDropdown.vue
index 4ece5a60..46e91a93 100644
--- a/resources/js/packages/ui/src/TimeEntry/TimeEntryRowTagDropdown.vue
+++ b/resources/js/packages/ui/src/TimeEntry/TimeEntryRowTagDropdown.vue
@@ -4,10 +4,16 @@ import { computed } from 'vue';
import TagBadge from '@/packages/ui/src/Tag/TagBadge.vue';
import type { Tag } from '@/packages/api/src';
-const props = defineProps<{
- tags: Tag[];
- createTag: (name: string) => Promise;
-}>();
+const props = withDefaults(
+ defineProps<{
+ tags: Tag[];
+ createTag: (name: string) => Promise;
+ compact?: boolean;
+ }>(),
+ {
+ compact: false,
+ }
+);
const emit = defineEmits<{
changed: [model: string[]];
@@ -20,23 +26,41 @@ const model = defineModel({
const timeEntryTags = computed(() => {
return props.tags.filter((tag) => model.value.includes(tag.id));
});
+
+const displayName = computed(() => {
+ if (props.compact && timeEntryTags.value.length > 0) {
+ const count = timeEntryTags.value.length;
+ return count === 1 ? '1 tag' : `${count} tags`;
+ }
+ if (timeEntryTags.value.length >= 3) {
+ const firstTag = timeEntryTags.value[0]?.name || '';
+ const remaining = timeEntryTags.value.length - 1;
+ return `${firstTag} + ${remaining} more`;
+ }
+ return timeEntryTags.value.map((tag: Tag) => tag.name).join(', ');
+});
diff --git a/resources/js/packages/ui/src/TimeTracker/TimeTrackerControls.vue b/resources/js/packages/ui/src/TimeTracker/TimeTrackerControls.vue
index 4c6e1039..1b5727c4 100644
--- a/resources/js/packages/ui/src/TimeTracker/TimeTrackerControls.vue
+++ b/resources/js/packages/ui/src/TimeTracker/TimeTrackerControls.vue
@@ -222,7 +222,7 @@ useSelectEvents(
diff --git a/resources/js/packages/ui/src/TimeTracker/TimeTrackerProjectTaskDropdown.vue b/resources/js/packages/ui/src/TimeTracker/TimeTrackerProjectTaskDropdown.vue
index 99cda9ed..ea0f7d67 100644
--- a/resources/js/packages/ui/src/TimeTracker/TimeTrackerProjectTaskDropdown.vue
+++ b/resources/js/packages/ui/src/TimeTracker/TimeTrackerProjectTaskDropdown.vue
@@ -515,14 +515,14 @@ const showCreateProject = ref(false);
props.class
)
">
-
-
+
+
{{ selectedProjectName }}
-
diff --git a/resources/js/packages/ui/src/TimeTracker/TimeTrackerRecentlyTrackedEntry.vue b/resources/js/packages/ui/src/TimeTracker/TimeTrackerRecentlyTrackedEntry.vue
index a539c6cc..586761df 100644
--- a/resources/js/packages/ui/src/TimeTracker/TimeTrackerRecentlyTrackedEntry.vue
+++ b/resources/js/packages/ui/src/TimeTracker/TimeTrackerRecentlyTrackedEntry.vue
@@ -42,15 +42,15 @@ const task = computed(() => {
ref="projectDropdownTrigger"
:color="project?.color"
:name="project?.name"
- class="shrink-0">
+ class="shrink min-w-0 max-w-[50%]">
-
+
{{ project?.name }}
-