# @hublib-web/content-suggestions Cross-framework content text/title renderer with support for mentions, tags and links. ## Features - Shared parser in `core` (`findAllEntities`, `findMentions`, `findTags`, `findLinks`). - React UI components in `react`: - `ContentText` - `ContentTextWithSuggestions` - `ContentTitleWithSuggestions` - Angular UI components in `angular` (based on `@hublib-web/tach-typography/angular`): - `ContentTextComponent` - `ContentTextWithSuggestionsComponent` - `ContentTitleWithSuggestionsComponent` - Depends on `@hublib-web/tach-typography` for visual consistency. - Business logic (API requests for mentions/tags) stays in consumer application. ## Install from Git (SSH tag) ```bash yarn add "@hublib-web/content-suggestions@git+ssh://git@github.com/ORG/REPO.git#workspace=@hublib-web/content-suggestions&tag=content-suggestions-v0.1.0" ``` `@hublib-web/tach-typography@0.3.0` is a peer dependency. ## Install inside this monorepo ```bash yarn add @hublib-web/content-suggestions ``` ## Release this package 1. Bump `version` in `packages/content-suggestions/package.json`. 2. Build package artifacts: ```bash yarn workspace @hublib-web/content-suggestions build ``` 3. Commit release files: ```bash git add packages/content-suggestions/package.json packages/content-suggestions/dist git commit -m "release(content-suggestions): v0.1.0" ``` 4. Create and push tag: ```bash git tag -a content-suggestions-v0.1.0 -m "@hublib-web/content-suggestions v0.1.0" git push origin main --follow-tags ``` Detailed docs: - [Release policy](../../docs/release-policy.md) - [Git installation](../../docs/git-installation.md) ## React usage ```tsx import { ContentTextWithSuggestions } from "@hublib-web/content-suggestions/react"; ; ``` With app-specific mention business logic: ```tsx } renderTag={(entity) => } />; ``` By default, tags are rendered as plain styled text (not links). ## Angular usage Standalone component usage: ```ts import { Component } from "@angular/core"; import { ContentTextWithSuggestionsComponent } from "@hublib-web/content-suggestions/angular"; @Component({ standalone: true, imports: [ContentTextWithSuggestionsComponent], template: ` `, }) export class FeedPostComponent { text = "@[John Doe](d290f1ee-6c54-4b01-90e6-d701748f0851) hello #tag"; onView = () => { // analytics }; } ``` Title variant with defaults (`weight: "bold"`, `ellipsis: { rows: 2 }`): ```ts import { ContentTitleWithSuggestionsComponent } from "@hublib-web/content-suggestions/angular"; // template // ``` Tokenization helper: ```ts import { createAngularContentTokens } from "@hublib-web/content-suggestions/angular"; const tokens = createAngularContentTokens(text); ``` ## Storybook (dev/design system) Run from repository root: ```bash yarn workspace @hublib-web/content-suggestions storybook ``` Build static Storybook: ```bash yarn workspace @hublib-web/content-suggestions storybook:build ```