From 031c29679659780bc05c0f0bf904fbf840634461 Mon Sep 17 00:00:00 2001 From: Sam Becker Date: Tue, 28 Jan 2025 20:06:28 -0600 Subject: [PATCH] Refactor badge text truncation --- src/app/admin/baseline/page.tsx | 86 ++++++++++++++++++----- src/components/AdminChildPage.tsx | 2 +- src/components/Badge.tsx | 14 ++-- src/components/Checklist.tsx | 19 +++-- src/components/ImageInput.tsx | 2 +- src/components/cmdk/CommandKItem.tsx | 2 +- src/components/primitives/EntityLink.tsx | 7 +- src/components/primitives/Icon.tsx | 2 +- src/components/primitives/LabeledIcon.tsx | 6 +- src/photo/PhotoHeader.tsx | 14 ++-- src/photo/PhotoPrevNext.tsx | 6 +- src/site/SiteChecklistClient.tsx | 2 +- src/site/globals.css | 4 ++ src/tag/FavsTag.tsx | 4 +- src/tag/HiddenTag.tsx | 4 +- 15 files changed, 127 insertions(+), 47 deletions(-) diff --git a/src/app/admin/baseline/page.tsx b/src/app/admin/baseline/page.tsx index 6ef3b204..8a37baf9 100644 --- a/src/app/admin/baseline/page.tsx +++ b/src/app/admin/baseline/page.tsx @@ -1,5 +1,6 @@ 'use client'; +import Badge from '@/components/Badge'; import DivDebugBaselineGrid from '@/components/DivDebugBaselineGrid'; import FieldSetWithStatus from '@/components/FieldSetWithStatus'; import SiteGrid from '@/components/SiteGrid'; @@ -8,12 +9,12 @@ import LabeledIcon from '@/components/primitives/LabeledIcon'; import PhotoFilmSimulationIcon from '@/simulation/PhotoFilmSimulationIcon'; import { useAppState } from '@/state/AppState'; import { clsx } from 'clsx/lite'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { FaCamera, FaHandSparkles, FaUserAltSlash } from 'react-icons/fa'; import { IoMdCamera } from 'react-icons/io'; import { IoImageSharp } from 'react-icons/io5'; -const DEBUG_LINES = new Array(22).fill(null); +const DEBUG_LINES = new Array(30).fill(null); export default function ComponentsPage() { const { @@ -23,6 +24,11 @@ export default function ComponentsPage() { const [debugComponents, setDebugComponents] = useState(false); + useEffect(() => { + setShouldShowBaselineGrid?.(true); + return () => setShouldShowBaselineGrid?.(false); + }, [setShouldShowBaselineGrid]); + return ( @@ -99,21 +105,6 @@ export default function ComponentsPage() { Image -
- } debug={debugComponents}> - Image - -
-
- } debug={debugComponents}> - Image - -
-
- } debug={debugComponents}> - Image - -
} @@ -162,6 +153,7 @@ export default function ComponentsPage() { icon={} label="Astia/Soft" type="icon-last" + iconWide badged debug={debugComponents} /> @@ -176,9 +168,67 @@ export default function ComponentsPage() { Image
+
+ } + label="Astia/Soft and another long line here" + type="icon-last" + iconWide + badged + debug={debugComponents} + /> +
+
+ } debug={debugComponents}> + Image + +
+
+ } + label="Astia/Soft" + type="icon-last" + iconWide + badged + debug={debugComponents} + /> +
+
+ } debug={debugComponents}> + Image + +
+
+ Optional +
+
+ Optional +
+
+ Optional +
+
+ Optional +
+
+ Optional +
+
+ Optional +
+
+ } debug={debugComponents}> + Image + +
+
+ } debug={debugComponents}> + Image + +
*]:bg-gray-800', + debugComponents && '[&>*]:bg-gray-300 [&>*]:dark:bg-gray-700', '[&>*]:flex', )}> {DEBUG_LINES.map((_, i) => diff --git a/src/components/AdminChildPage.tsx b/src/components/AdminChildPage.tsx index a0b4861e..5403981f 100644 --- a/src/components/AdminChildPage.tsx +++ b/src/components/AdminChildPage.tsx @@ -54,7 +54,7 @@ function AdminChildPage({ {breadcrumb} diff --git a/src/components/Badge.tsx b/src/components/Badge.tsx index 2b83c4e2..a1f5c97c 100644 --- a/src/components/Badge.tsx +++ b/src/components/Badge.tsx @@ -21,14 +21,14 @@ export default function Badge({ switch (type) { case 'large': return clsx( - 'px-1.5 py-[0.3rem] rounded-md', + 'px-1.5 h-[26px]', + 'rounded-md', 'bg-gray-100/80 dark:bg-gray-900/80', 'border border-gray-200/60 dark:border-gray-800/75', ); case 'small': return clsx( - 'h-max-baseline', - 'px-[5px] py-[2.75px]', + 'px-[5px] h-[17px] md:h-[18px]', 'text-[0.7rem] font-medium rounded-[0.25rem]', highContrast ? 'text-invert bg-invert' @@ -44,12 +44,16 @@ export default function Badge({ }; return ( - + {children} diff --git a/src/components/Checklist.tsx b/src/components/Checklist.tsx index 3522e9ff..ec62c3bb 100644 --- a/src/components/Checklist.tsx +++ b/src/components/Checklist.tsx @@ -3,6 +3,7 @@ import { clsx } from 'clsx/lite'; import ExperimentalBadge from './ExperimentalBadge'; import Badge from './Badge'; import ResponsiveText from './primitives/ResponsiveText'; +import { parameterize } from '@/utility/string'; export default function Checklist({ title, @@ -19,13 +20,19 @@ export default function Checklist({ experimental?: boolean children: ReactNode }) { + const slug = parameterize(title); + return (
- +
{showUploadStatus && filesLength > 0 && -
+
{fileUploadName}
}
diff --git a/src/components/cmdk/CommandKItem.tsx b/src/components/cmdk/CommandKItem.tsx index 4e9b0bd5..a9d54748 100644 --- a/src/components/cmdk/CommandKItem.tsx +++ b/src/components/cmdk/CommandKItem.tsx @@ -48,7 +48,7 @@ export default function CommandKItem({ >
{accessory} - + {label} {annotation && !loading && diff --git a/src/components/primitives/EntityLink.tsx b/src/components/primitives/EntityLink.tsx index b96aeb5e..434987b2 100644 --- a/src/components/primitives/EntityLink.tsx +++ b/src/components/primitives/EntityLink.tsx @@ -22,6 +22,7 @@ export default function EntityLink({ prefetch, title, hoverEntity, + className, debug, }: { icon: ReactNode @@ -33,6 +34,7 @@ export default function EntityLink({ title?: string hoverEntity?: ReactNode debug?: boolean + className?: string } & EntityLinkExternalProps) { const classForContrast = () => { switch (contrast) { @@ -55,7 +57,10 @@ export default function EntityLink({ ; return ( - + {loading diff --git a/src/components/primitives/LabeledIcon.tsx b/src/components/primitives/LabeledIcon.tsx index 66aac337..271d9cb1 100644 --- a/src/components/primitives/LabeledIcon.tsx +++ b/src/components/primitives/LabeledIcon.tsx @@ -27,7 +27,7 @@ export default function LabeledIcon({ debug?: boolean, } & Partial>) { const className = clsx( - 'inline-flex gap-x-1 md:gap-x-1.5', + 'inline-flex gap-x-1 md:gap-x-1.5 min-w-0', classNameProp, debug && 'border border-green-500 m-[-1px]', ); @@ -43,8 +43,8 @@ export default function LabeledIcon({ } {children && type !== 'icon-only' && {children} } diff --git a/src/photo/PhotoHeader.tsx b/src/photo/PhotoHeader.tsx index 74709a14..74d1e66e 100644 --- a/src/photo/PhotoHeader.tsx +++ b/src/photo/PhotoHeader.tsx @@ -81,7 +81,7 @@ export default function PhotoHeader({ selectedPhoto !== undefined && {titleForPhoto(selectedPhoto, true)} ); @@ -112,12 +112,18 @@ export default function PhotoHeader({ ? 'col-span-2 sm:col-span-1 lg:col-span-2' : 'col-span-2 sm:col-span-1' : isGridHighDensity - ? 'col-span-3 sm:col-span-3 lg:col-span-5' - : 'col-span-3 md:col-span-2 lg:col-span-3', + ? 'col-span-3 sm:col-span-3 lg:col-span-5 w-[110%] xl:w-full' + : 'col-span-3 md:col-span-2 lg:col-span-3 w-[110%] xl:w-full', )}> {headerType === 'photo-detail-with-entity' ? renderContentA() - :

{renderContentA()}

} + // Necessary for title truncation + :

+ {renderContentA()} +

}
{/* Content B: Filter Set Meta or Photo Pagination */}
-
+
-
+
} diff --git a/src/site/globals.css b/src/site/globals.css index e80a7ad3..999cf3c5 100644 --- a/src/site/globals.css +++ b/src/site/globals.css @@ -190,6 +190,10 @@ @apply gap-[1.1875rem] md:gap-[1.25rem] } + .h-baseline { + @apply + h-[1.1875rem] md:h-[1.25rem] + } .max-h-baseline { @apply max-h-[1.1875rem] md:max-h-[1.25rem] diff --git a/src/tag/FavsTag.tsx b/src/tag/FavsTag.tsx index f2e82c3d..60f76ced 100644 --- a/src/tag/FavsTag.tsx +++ b/src/tag/FavsTag.tsx @@ -18,11 +18,11 @@ export default function FavsTag({ return ( + ? {TAG_FAVS} : TAG_FAVS} diff --git a/src/tag/HiddenTag.tsx b/src/tag/HiddenTag.tsx index e9b176f2..9727abff 100644 --- a/src/tag/HiddenTag.tsx +++ b/src/tag/HiddenTag.tsx @@ -17,11 +17,11 @@ export default function HiddenTag({ return ( + ? {TAG_HIDDEN} : TAG_HIDDEN}