-
- {loading ? (
-
{t('website.linkGenerator.loading')}
- ) : uiCategories.length === 0 ? (
-
{t('website.linkGenerator.empty')}
- ) : (
-
- )}
+
+
+
+ {filterBy === 'category' ? (
+
+
+ {loading ? (
+
{t('website.linkGenerator.loading')}
+ ) : uiCategories.length === 0 ? (
+
{t('website.linkGenerator.empty')}
+ ) : (
+
+ )}
+
+ ) : (
+
+
+
+
{t('website.linkGenerator.tagsHint')}
+
+ )}
+
{preview ? (
{preview}
diff --git a/apps/business/src/components/PortfolioCard.module.css b/apps/business/src/components/PortfolioCard.module.css
index 8046bbb..4be8a12 100644
--- a/apps/business/src/components/PortfolioCard.module.css
+++ b/apps/business/src/components/PortfolioCard.module.css
@@ -115,6 +115,24 @@
text-align: left;
}
+.categoryChip {
+ display: inline-block;
+ align-self: flex-start;
+ max-width: 100%;
+ padding: 3px 10px;
+ font-family: var(--font-ui);
+ font-size: 11px;
+ font-weight: 500;
+ line-height: 1.35;
+ color: var(--text-secondary);
+ background: rgba(148, 163, 184, 0.15);
+ border-radius: 50px;
+ unicode-bidi: isolate;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.meta {
margin: 0;
font-size: 12px;
@@ -122,6 +140,6 @@
color: var(--text-muted);
}
-.metaDot {
- margin: 0 6px;
+.metaDate {
+ unicode-bidi: isolate;
}
diff --git a/apps/business/src/components/PortfolioCard.tsx b/apps/business/src/components/PortfolioCard.tsx
index e113e73..3dbb5cc 100644
--- a/apps/business/src/components/PortfolioCard.tsx
+++ b/apps/business/src/components/PortfolioCard.tsx
@@ -94,14 +94,15 @@ export function PortfolioCard({
)
) : null}
+ {portfolio.categoryName ? (
+
+ {portfolio.categoryName}
+
+ ) : null}
- {portfolio.categoryName ? (
- <>
- {portfolio.categoryName}
- ·
- >
- ) : null}
- {publishDate}
+
+ {publishDate}
+
diff --git a/apps/business/src/i18n/messages.ts b/apps/business/src/i18n/messages.ts
index 6726a36..29478b1 100644
--- a/apps/business/src/i18n/messages.ts
+++ b/apps/business/src/i18n/messages.ts
@@ -1371,11 +1371,19 @@ const en = {
'portfolio.card.settings.link': 'View settings',
'portfolio.list.subtitle': '{count} items · View, edit and manage your portfolio content.',
+ 'portfolio.list.filters': 'Filters',
+ 'portfolio.list.filterName': 'Name',
+ 'portfolio.list.filterNamePlaceholder': 'Search by portfolio name',
+ 'portfolio.list.filterCategory': 'Category',
+ 'portfolio.list.filterCategoryAll': 'All categories',
+ 'portfolio.list.search': 'Search',
+ 'portfolio.list.clearFilters': 'Clear filters',
'portfolio.list.loading': 'Loading portfolios...',
'portfolio.list.empty': 'You have not added any portfolio items yet.',
'portfolio.list.emptyNone': 'no portfolio items',
'portfolio.list.emptyAction': 'adding a portfolio item',
'portfolio.list.emptyCta': 'Add portfolio',
+ 'portfolio.list.emptyFiltered': 'No portfolios match your filters.',
'portfolio.list.errorLoad': 'Unable to load portfolios.',
'portfolio.list.errorDelete': 'Unable to delete portfolio.',
'portfolio.list.errorMove': 'Unable to move portfolio.',
@@ -1526,9 +1534,15 @@ const en = {
'website.linkGenerator.generate': 'Generate',
'website.linkGenerator.title': 'Generate link',
- 'website.linkGenerator.subtitle': 'Pick a content type, then a category. The link is inserted into the field.',
+ 'website.linkGenerator.subtitle':
+ 'Pick a content type, then filter by category or tag. The link is inserted into the field.',
'website.linkGenerator.type': 'Type',
+ 'website.linkGenerator.filterBy': 'Filter by',
'website.linkGenerator.category': 'Category',
+ 'website.linkGenerator.tag': 'Tag',
+ 'website.linkGenerator.tags': 'Tags',
+ 'website.linkGenerator.tagsPlaceholder': 'Type a tag and press Enter',
+ 'website.linkGenerator.tagsHint': 'Add one or more tags. Press Enter after each tag.',
'website.linkGenerator.pickCategory': 'Search categories...',
'website.linkGenerator.insert': 'Insert link',
'website.linkGenerator.loading': 'Loading categories...',
@@ -2156,6 +2170,8 @@ const en = {
'otp.error.signIn': 'Unable to sign in with SMS code.',
'common.close': 'Close',
+ 'common.cancel': 'Cancel',
+ 'common.delete': 'Delete',
'common.resendIn': 'Resend code in {seconds}s',
'common.resend': 'Resend SMS code',
'common.codeSent': 'Verification code sent to {phone}',
@@ -3535,11 +3551,19 @@ const fa: Record