jamespot-react-components 1.3.90 → 1.3.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,15 @@
1
+ import { RegisterOptions } from 'react-hook-form';
1
2
  import { FormControls } from '../../Form/Input/Common/useFormControls';
2
- export declare const EditorInput: ({ label, placeholder, initialValue, width, rules, description, isMultiline, onChange, }: {
3
+ export declare const EditorInput: ({ label, placeholder, initialValue, width, rules, rulesValidate, description, isMultiline, onChange, }: {
3
4
  label: string;
4
5
  placeholder?: string;
5
6
  initialValue: string | undefined;
6
7
  autoFocus?: boolean;
7
8
  width?: string;
8
9
  rules?: FormControls;
10
+ rulesValidate?: RegisterOptions<{
11
+ text: string;
12
+ }>["validate"];
9
13
  description?: string;
10
14
  isMultiline?: boolean;
11
15
  onChange: (text: string) => void;
@@ -0,0 +1,5 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ type Story = StoryObj;
5
+ export declare const IconCatalog: Story;
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { JRCIconSelectionModal } from './JRCIconSelectionModal';
3
+ declare const meta: Meta<typeof JRCIconSelectionModal>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof JRCIconSelectionModal>;
6
+ export declare const Default: Story;
@@ -0,0 +1,62 @@
1
+ import { DataCy } from '../../types/dataAttributes';
2
+ /**
3
+ * Provider detection / URL transformation contract.
4
+ *
5
+ * The component is agnostic of which providers exist — the consumer wires the
6
+ * helpers it needs. This keeps `JRCIframeVideo` in `jamespot-react-components`
7
+ * free of any backend convention (e.g. Studio's widgetType vocabulary).
8
+ */
9
+ export interface JRCIframeVideoHelpers {
10
+ parse: (url: string) => {
11
+ provider: string;
12
+ videoId: string;
13
+ } | null;
14
+ toEmbedUrl: (parsed: {
15
+ provider: string;
16
+ videoId: string;
17
+ }) => string;
18
+ getThumbnailUrl: (parsed: {
19
+ provider: string;
20
+ videoId: string;
21
+ }, publicUrl: string, options?: {
22
+ signal?: AbortSignal;
23
+ }) => Promise<string | null>;
24
+ }
25
+ export interface JRCIframeVideoProps extends DataCy {
26
+ /** Public video URL provided by the user. */
27
+ url: string;
28
+ /**
29
+ * - 'view' : thumbnail + click-to-load iframe inline (detail view)
30
+ * - 'compact' : thumbnail + click opens the source URL in a new tab
31
+ */
32
+ mode: 'view' | 'compact';
33
+ /** Aria label / iframe title — should describe the video content. */
34
+ title?: string;
35
+ /** Provider helpers injected by the consumer. */
36
+ helpers: JRCIframeVideoHelpers;
37
+ /** Corner radius in px. Defaults: 8 in view mode, 6 in compact. Pass 0 for square corners. */
38
+ borderRadius?: number;
39
+ /**
40
+ * View mode only — load the iframe immediately instead of waiting for a user click
41
+ * on the thumbnail. Disables the RGPD-friendly two-step gate. No effect in compact mode.
42
+ */
43
+ autoload?: boolean;
44
+ /**
45
+ * Background color of the view container, visible while the iframe is loading. Defaults to the
46
+ * theme's `grey1`. Pass `'transparent'` to let the parent's background show through (useful
47
+ * when the parent already paints a black backdrop, matching the provider's player chrome).
48
+ */
49
+ loadingBackground?: string;
50
+ }
51
+ /**
52
+ * Renders an embedded video with a click-to-load thumbnail (RGPD-friendly: the
53
+ * iframe is mounted only when the user clicks, never automatically).
54
+ *
55
+ * - `mode='view'` : the iframe replaces the thumbnail in place
56
+ * - `mode='compact'` : the click opens the source URL in a new tab
57
+ *
58
+ * If the URL is unsafe (`javascript:` etc.) the component renders an error
59
+ * banner. If the URL is safe but no provider matches, it renders a degraded
60
+ * `<a target="_blank">` fallback.
61
+ */
62
+ export declare const JRCIframeVideo: import('react').NamedExoticComponent<JRCIframeVideoProps>;
@@ -0,0 +1,10 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { JRCIframeVideo } from './JRCIframeVideo';
3
+ declare const meta: Meta<typeof JRCIframeVideo>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof JRCIframeVideo>;
6
+ export declare const View: Story;
7
+ export declare const Compact: Story;
8
+ export declare const UnsupportedProvider: Story;
9
+ export declare const EmptyUrl: Story;
10
+ export declare const UnsafeUrl: Story;
@@ -0,0 +1,12 @@
1
+ import { WidgetYoutubeContent } from 'jamespot-user-api';
2
+ export interface JRCWidgetYoutubeEditorProps {
3
+ uniqid: string;
4
+ content: WidgetYoutubeContent;
5
+ onChangeContent: (uniqid: string, content: WidgetYoutubeContent) => void;
6
+ /**
7
+ * Optional URL validator. Returning false marks the field as invalid (empty values are not validated).
8
+ * Injected by the consumer so this component stays agnostic of provider detection logic.
9
+ */
10
+ validateUrl?: (url: string) => boolean;
11
+ }
12
+ export declare const JRCWidgetYoutubeEditor: ({ uniqid, content, onChangeContent, validateUrl, }: JRCWidgetYoutubeEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -98,6 +98,7 @@ export { JRCGrid } from './JRCGrid/JRCGrid';
98
98
  export { JRCHtml } from './JRCHtml/JRCHtml';
99
99
  export { JRCIcon } from './JRCIcon/JRCIcon';
100
100
  export { JRCIconButton } from './JRCIconButton/JRCIconButton';
101
+ export { JRCIframeVideo } from './JRCIframeVideo/JRCIframeVideo';
101
102
  export { JRCImg } from './JRCImg/JRCImg';
102
103
  export { JRCList } from './JRCList/JRCList';
103
104
  export { JRCLoader } from './JRCLoader/JRCLoader';
@@ -198,4 +199,5 @@ export { JRCWidgetUserProfile } from './Widgets/JRCWidgetUserProfile/JRCWidgetUs
198
199
  export { JRCWidgetUserProfileEditor } from './Widgets/JRCWidgetUserProfile/JRCWidgetUserProfileEditor';
199
200
  export { JRCWidgetWelcome } from './Widgets/JRCWidgetWelcome/JRCWidgetWelcome';
200
201
  export { JRCWidgetWelcomeEditor } from './Widgets/JRCWidgetWelcome/JRCWidgetWelcomeEditor';
202
+ export { JRCWidgetYoutubeEditor } from './Widgets/JRCWidgetYoutube/JRCWidgetYoutubeEditor';
201
203
  export { WidgetCalendarEditor } from './Widgets/WidgetCalendar/WidgetCalendarEditor';
@@ -55,6 +55,13 @@ export type ThemeType = {
55
55
  xl: number;
56
56
  };
57
57
  size: ThemeSize;
58
+ iconSize: {
59
+ xs: number;
60
+ sm: number;
61
+ md: number;
62
+ lg: number;
63
+ xl: number;
64
+ };
58
65
  };
59
66
  export declare function getColor(theme: ThemeType, color: string): string;
60
67
  declare const Theme: ITheme;
@@ -213,6 +213,9 @@ declare const _default: {
213
213
  "GLOBAL_Form_SendAlert": "Send the alert email to those who have requested it",
214
214
  "GLOBAL_Go_To_Content": "Go to content",
215
215
  "GLOBAL_Groups": "Groups",
216
+ "GLOBAL_IframeVideo_InvalidUrl": "Invalid or unsafe URL",
217
+ "GLOBAL_IframeVideo_OpenInNewTab": "Open video in a new tab",
218
+ "GLOBAL_IframeVideo_Play": "Play video",
216
219
  "GLOBAL_Image": "Image",
217
220
  "GLOBAL_Import": "Import",
218
221
  "GLOBAL_Insert": "Insert",
@@ -460,7 +463,11 @@ declare const _default: {
460
463
  "WIDGET_User_Profil": "Profil utilisateur",
461
464
  "WIDGET_Welcome_Default_Message": "Bienvenue",
462
465
  "WIDGET_Welcome_Linebreak_Label": "Saut de ligne (après le message)",
463
- "WIDGET_Welcome": "Message d'accueil"
466
+ "WIDGET_Welcome": "Message d'accueil",
467
+ "WIDGET_Youtube_Url": "Video URL",
468
+ "WIDGET_Youtube": "Video",
469
+ "WIDGET_Youtube_Text": "Embed a YouTube video",
470
+ "WIDGET_Youtube_InvalidUrl_FieldError": "Enter a valid YouTube URL"
464
471
  }
465
472
  }
466
473
  ;
@@ -4,6 +4,7 @@ import * as document from './utils.document';
4
4
  import * as file from './utils.files';
5
5
  import * as form from './utils.form';
6
6
  import * as icons from './utils.icons';
7
+ import * as iframeVideo from './utils.iframeVideo';
7
8
  import * as image from './utils.image';
8
9
  import * as misc from './utils.misc';
9
10
  import * as object from './utils.object';
@@ -17,6 +18,7 @@ export declare const Utils: {
17
18
  file: typeof file;
18
19
  form: typeof form;
19
20
  icons: typeof icons;
21
+ iframeVideo: typeof iframeVideo;
20
22
  image: typeof image;
21
23
  misc: typeof misc;
22
24
  object: typeof object;
@@ -1,2 +1,2 @@
1
- export declare const list: string[];
2
- export declare const jamespotIcons: string[];
1
+ export declare const list: readonly ["2fa", "500px", "accessibility", "accessible-icon", "actionplan", "activities", "address-book", "address-book-o", "address-card", "address-card-o", "admin-advanced", "admin-cog", "adn", "affinity", "album-img", "alert", "align-center", "align-center-o", "align-justify", "align-justify-o", "align-left", "align-left-o", "align-right", "align-right-o", "amazon", "anchor", "android", "angellist", "angle-down", "angle-left", "angle-right", "angle-up", "angles-down", "angles-left", "angles-right", "angles-up", "animated-meeting", "animations", "appearin", "appel", "apple", "application", "applications", "approuved", "arrow-down", "arrow-down-1-9", "arrow-down-9-1", "arrow-down-a-z", "arrow-down-short-wide", "arrow-down-wide-short", "arrow-down-z-a", "arrow-left", "arrow-pointer", "arrow-right", "arrow-rotate-left", "arrow-rotate-right", "arrow-up", "arrow-up-right-and-arrow-down-left", "arrow-up-to-line", "arrows-rotate", "arrows-up-down", "arrows-up-down-left-right", "article", "articletranslation", "articlewidget", "asei", "assetreservation", "asterisk", "at", "at-o", "audio-description", "backward", "backward-fast", "backward-step", "badges", "bag-shopping", "ban", "bandcamp", "barcode", "bars", "bars-progress", "basket-shopping", "bath", "battery-empty", "battery-full", "battery-half", "battery-quarter", "battery-three-quarters", "bed", "beer-mug-empty", "behance", "bell", "bell-o", "bell-ring-o", "bell-slash", "bell-slash-o", "bicycle", "binoculars", "bitbucket", "black-tie", "block-question", "block-question-o", "bluetooth", "bluetooth-b", "board", "boardcard", "boardlist", "boardreport", "bold", "bold-o", "bolt", "bolt-o", "bomb", "book", "book-bookmark", "bookmark", "bookmark-o", "bookmarks", "books", "bot", "box-archive", "braille", "briefcase", "btc", "bug", "building", "building-columns", "building-o", "bullhorn", "bullhorn-o", "bullseye", "bullseye-arrow", "bullseye-arrow-o", "bus", "business-directory", "businessdirectory", "businessmanagement", "buysellads", "cake-candles", "calculator", "calendar", "calendar-check", "calendar-check-o", "calendar-circle-user", "calendar-circle-user-o", "calendar-days", "calendar-days-lines", "calendar-lines-o", "calendar-minus-o", "calendar-o", "calendar-plus-o", "calendar-range-o", "calendar-xmark-o", "call-for-tender", "camera", "camera-o", "camera-retro", "camera-web", "car", "caret-down", "caret-left", "caret-right", "caret-up", "cart-arrow-down", "cart-plus", "cart-shopping", "cas", "cc-amex", "cc-diners-club", "cc-discover", "cc-jcb", "cc-mastercard", "cc-paypal", "cc-stripe", "cc-visa", "certificate", "cgu", "chart-area", "chart-bar", "chart-column", "chart-kanban", "chart-line", "chart-pie", "check", "check-o", "chevron-down", "chevron-down-o", "chevron-left", "chevron-left-o", "chevron-left-thick", "chevron-right", "chevron-right-o", "chevron-up", "chevron-up-o", "child", "chrome", "cicle-play-filled", "circle", "circle-3-scale", "circle-3-uniform", "circle-arrow-down", "circle-arrow-left", "circle-arrow-right", "circle-arrow-up", "circle-check", "circle-check-o", "circle-chevron-down", "circle-chevron-left", "circle-chevron-right", "circle-chevron-up", "circle-dot-o", "circle-down-o", "circle-exclamation", "circle-half-stroke", "circle-info", "circle-left-o", "circle-minus", "circle-notch", "circle-o", "circle-pause", "circle-pause-o", "circle-play", "circle-play-o", "circle-plus", "circle-question", "circle-question-o", "circle-right-o", "circle-stop", "circle-stop-o", "circle-up-o", "circle-user", "circle-user-o", "circle-xmark", "circle-xmark-o", "client", "clipboard-question", "clock", "clock-o", "clock-rotate-left", "clone", "clone-o", "closed-captioning-o", "cloud", "cloud-arrow-down", "cloud-arrow-up", "cloud-o", "code", "code-branch", "code-o", "codepen", "codiepie", "cog", "cogs", "comment", "comment-bubble-lines", "comment-captions-o", "comment-dots", "comment-dots-o", "comment-o", "comments", "comments-o", "communication-campaign", "community", "community-hook", "compass", "compass-o", "congratulate", "connectdevelop", "contact", "contact-card", "contacts", "contao", "content-report", "copy", "copy-o", "copyright", "copyright-o", "countdown", "creation", "creative-commons", "credit-card-o", "crisis", "crop", "crosshairs", "css3", "cube", "cubes", "custom", "custom-cgu", "dashcube", "database", "date-poll", "delicious", "desk", "desktop", "detectup", "deviantart", "diagram-venn", "diffgroup", "digg", "discover", "discovery", "document", "dollar-sign", "down-left-and-up-right-to-center", "down-long", "download", "dpo-applications", "dpo-awaiting-attention", "dpo-compliance", "dpo-compliance-todo", "dpo-dpia", "dpo-material", "dpo-process", "dpo-process-book", "dpo-process-security", "dpo-request", "dpo-rgpd-data-breach", "dpo-sub-process", "dpo-subcontractor", "dpolaunch", "draftio", "dribbble", "dropbox", "droplet", "drupal", "dw", "e-reputation", "ear-deaf", "ear-listen", "earth-americas", "earth-europe", "earth-europe-o", "edge", "edit", "eject", "ellipsis", "ellipsis-vertical", "embed", "empire", "envelope", "envelope-o", "envelope-open-o", "envira", "eraser", "etsy", "eudonet", "euro-sign", "event", "exclamation", "expeditedssl", "external-apps", "extra-bot", "eye", "eye-dropper", "eye-low-vision", "eye-o", "eye-slash", "eye-slash-o", "face-confused-o", "face-downcast-sweat-o", "face-frown-o", "face-grimace-o", "face-grin-beam", "face-grin-beam-sweat", "face-grin-hearts-o", "face-grin-squint", "face-grin-squint-tears", "face-grin-squint-tears-o", "face-grin-stars-o", "face-grin-tears", "face-grin-tears-o", "face-grin-wink-o", "face-kiss-wink-heart-o", "face-laugh-wink-o", "face-meh-o", "face-party-o", "face-smile", "face-smile-hearts", "face-smile-o", "face-smile-wink", "face-surprise", "face-tongue-money", "face-weary", "facebook", "facebook-f", "facture", "faq", "faqitem", "favorite", "favs", "favs-o", "fax", "file", "file-arrow-down", "file-arrow-down-o", "file-audio-o", "file-code-o", "file-excel-o", "file-image-o", "file-integrity", "file-lines", "file-lines-o", "file-lock", "file-o", "file-pdf-o", "file-pen", "file-powerpoint-o", "file-sync", "file-user", "file-user-o", "file-video-o", "file-word-o", "file-zipper-o", "filebank", "film", "filter", "filter-list", "fire", "fire-extinguisher", "firefox", "first-order", "flag", "flag-checkered", "flag-o", "flash-widgets", "flask", "flask-o", "flickr", "floppy-disk-o", "flux", "folder", "folder-closed", "folder-o", "folder-open", "folder-open-o", "folders", "font", "font-awesome", "fonticons", "formquestion", "fort-awesome", "forumbee", "forward", "forward-fast", "forward-step", "foursquare", "franceconnect", "free-code-camp", "fs-intranet", "funding", "futbol-o", "gallery-thumbnails", "gamepad", "gauge-high", "gavel", "gear", "gears", "gem-o", "genderless", "get-pocket", "gg", "gg-circle", "gift", "git", "github", "github-alt", "gitlab", "glide", "glide-g", "goal", "google", "google-2", "google-drive", "google-play", "google-plus", "google-plus-g", "google-wallet", "graduation-cap", "gratipay", "grav", "grid-2", "grip-dots", "grip-dots-o", "grip-dots-vertical", "grip-dots-vertical-o", "group", "hacker-news", "hammer", "hand", "hand-back-fist-o", "hand-holding-heart-o", "hand-lizard-o", "hand-o", "hand-peace-o", "hand-point-down-o", "hand-point-left-o", "hand-point-right-o", "hand-point-up-o", "hand-pointer-o", "hand-scissors-o", "hand-spock-o", "hand-wave-o", "hands", "hands-asl-interpreting", "hands-clapping-o", "handshake-o", "handshake-simple-o", "hard-drive-o", "hashtag", "head-side-brain", "head-side-brain-o", "head-side-gear", "head-side-gear-o", "heading", "headphones", "headset", "headset-o", "heart", "heart-o", "heart-pulse", "helpcenter", "hospital-o", "hotel", "hourglass", "hourglass-clock", "hourglass-clock-o", "hourglass-end", "hourglass-half", "hourglass-start", "house", "house-o", "houzz", "html5", "html5-device", "https", "i-cursor", "iasa", "id-badge", "id-badge-o", "id-card", "id-card-o", "idea", "identity-injection", "iframe", "image-o", "images", "images-o", "imdb", "inbox", "inbox-enveloppe", "inbox-o", "indent", "indian-rupee-sign", "indicateurs", "indicator", "industry", "info", "info-bubble", "infusion", "innovation-lab", "instagram", "instant-messenger", "internet-explorer", "intranet", "intranet-manage", "intranet-page", "invitations", "iop-content", "iop-last-online", "iop-register", "iop-signin", "iop-title", "ioxhost", "italic", "italic-o", "iziconf", "j-jamespot", "j-table", "j-table-column-plus-after", "j-table-column-plus-before", "j-table-column-remove", "j-table-merge-cells", "j-table-remove", "j-table-row-plus-after", "j-table-row-plus-before", "j-table-row-remove", "j-table-split-cell", "j-tripadvisor", "jamesbot", "jamespot", "jamespot-point", "jet-fighter", "jitsi", "jland", "job", "job-board", "joomla", "jsfiddle", "key", "key-o", "keyboard-o", "km", "lab", "language", "laptop", "lastfm", "lasuite-docs", "lasuite-fichers", "lasuite-france-transferts", "lasuite-grist", "lasuite-messagerie", "lasuite-resana", "lasuite-tchap", "lasuite-visio", "layout-fluid", "ldap", "lead", "leaf", "leanpub", "lecko", "left-long", "left-right", "lemon-o", "libreoffice", "life-ring", "lightbulb-o", "like", "link", "link-o", "link-simple-diagonal", "link-slash", "linkedin", "linkedin-in", "linode", "linux", "list", "list-check", "list-ol", "list-ol-o", "list-ul", "list-ul-o", "list-ul-round", "location-arrow", "location-dot", "location-dot-round", "lock", "magic-pad", "magic-wand", "magicpad", "magnet", "magnifying-glass", "magnifying-glass-minus", "magnifying-glass-minus-o", "magnifying-glass-plus", "magnifying-glass-plus-o", "mail2rse", "map", "map-o", "map-pin", "markdown", "mars", "mars-and-venus", "mars-double", "mars-stroke", "mars-stroke-right", "mars-stroke-up", "martini-glass-empty", "maxcdn", "maximize", "media-library", "medium", "meeting", "meetup", "megaphone-o", "membogo", "memo-pad-o", "mention", "menu", "mercury", "message-exclamation", "message-exclamation-o", "messages", "messages-o", "microchip", "microphone", "microphone-slash", "minus", "minus-o", "mixcloud", "mobile-check", "mobile-screen-button", "modx", "money-bill-1", "moon-o", "motorcycle", "mug-saucer", "music", "music-o", "network-wired", "neuter", "news", "newsflash", "newspaper", "newspaper-o", "note-sticky", "note-sticky-o", "notification-center", "notifications", "oauth", "object-group", "object-group-o", "object-ungroup", "object-ungroup-o", "odisae", "odnoklassniki", "offer", "office365", "online-edit", "opencart", "openid", "opera", "optin-monster", "orgcharts", "outdent", "package", "pagelines", "paintbrush", "paper-plane", "paper-plane-o", "paperclip", "paperclip-o", "paragraph", "partner", "paste", "pause", "paw", "paypal", "pen", "pen-o", "pen-short-end", "pen-to-square-o", "pencil", "pencil-o", "percent", "perfsuser", "person", "person-dress", "person-walking", "person-walking-with-cane", "personal-data", "phone", "phone-volume", "picture", "pied-piper", "pied-piper-alt", "pied-piper-pp", "pinterest", "pinterest-p", "plane", "plateform", "play", "plug", "plus", "podcast", "poll", "power-off", "print", "print-o", "process", "product-hunt", "project", "proxem", "publication", "publish", "puzzle-piece", "puzzle-piece-left-top", "qq", "qrcode", "question", "question-double", "quizz", "quora", "quote-left", "quote-right", "radar", "radar-o", "ravelry", "rebel", "recommandation", "rectangle-list-o", "rectangle-vertical-history", "rectangle-vertical-history-o", "rectangle-xmark", "rectangle-xmark-o", "recycle", "reddit", "reddit-alien", "registered", "registered-o", "regular-image-user-circle-play", "renren", "reply", "reply-all", "report", "reporting", "reservation", "retweet", "rgpdapplication", "rgpdcompliance", "rgpdcompliancetodo", "rgpdcrisis", "rgpdmaterial", "rgpdprocess", "rgpdregistry", "rgpdrequest", "rgpdsecurity", "rgpdsubcontractor", "right-from-bracket", "right-left", "right-long", "right-to-bracket", "road", "rocket", "rss", "rss-thick", "ruble-sign", "rupee-sign", "safari", "sale-point", "saml", "saml2", "scale-balanced", "scissors", "scribd", "secure-document", "sellcast", "sellsy", "server", "share", "share-from-square", "share-nodes", "share-nodes-o", "shared-content", "shekel-sign", "shield", "shield-check", "shield-check-o", "shield-o", "shielded-lock", "ship", "shirtsinbulk", "shop-simple", "shortcut", "shower", "shuffle", "shuttle-space", "sign-post", "signal", "signs-post", "simplybuilt", "site", "sitemap", "skyatlas", "skype", "slack", "slider-content", "sliders", "slideshare", "smartpage-code", "smartpage-form", "smartpage-group", "smartpage-image", "smartpage-imagetext", "smartpage-inscription", "smartpage-lien", "smartpage-list", "smartpage-news", "smartpage-parameters", "smartpage-slider", "smartpage-soundcloud", "smartpage-texte", "smartpage-titre", "smartpage-user", "smartpage-youtube", "snapchat", "snowflake-o", "social", "sort", "sort-down", "sort-up", "soundcloud", "sparkles", "sparkles-o", "spinner", "spoon", "spotify", "square", "square-behance", "square-caret-down-o", "square-caret-left-o", "square-caret-right-o", "square-caret-up-o", "square-check", "square-check-o", "square-envelope", "square-facebook", "square-git", "square-github", "square-google-plus", "square-h", "square-lastfm", "square-list", "square-minus", "square-minus-o", "square-o", "square-odnoklassniki", "square-pen", "square-phone", "square-pinterest", "square-plus", "square-plus-o", "square-poll-vertical", "square-poll-vertical-o", "square-reddit", "square-rss", "square-share-nodes", "square-snapchat", "square-steam", "square-tumblr", "square-twitter", "square-up-right", "square-viadeo", "square-vimeo", "square-xing", "square-xmark", "square-youtube", "stack-exchange", "stack-overflow", "star", "star-half", "star-half-stroke", "star-half-stroke-o", "star-o", "steam", "sterling-sign", "stethoscope", "stop", "stopwatch-20", "stopwatch-20-o", "street-view", "strikethrough", "strikethrough-o", "studio", "stumbleupon", "stumbleupon-circle", "subscript", "suggest", "suitcase", "suitcase-medical", "sun-o", "superpowers", "superscript", "support", "survey-date", "surveydate", "table", "table-cells", "table-cells-large", "table-columns", "table-group", "table-list", "tablet-screen-button", "tag", "tags", "targetinfo", "task", "tasks", "taxi", "taxonomy", "teamwork", "telegram", "temperature-empty", "temperature-full", "temperature-half", "temperature-quarter", "temperature-three-quarters", "tencent-weibo", "tender", "terminal", "text", "text-height", "text-indicator", "text-width", "themeisle", "thumbs-down", "thumbs-down-o", "thumbs-up", "thumbs-up-o", "thumbs-up-o", "thumbs-up-on", "thumbs-up-round", "thumbtack", "ticket", "todo", "toggle-off", "toggle-on", "tour", "trademark", "train", "train-subway", "transgender", "trash", "trash-can", "trash-can-o", "tree", "trello", "triangle-exclamation", "trophy", "truck", "truck-medical", "trustelem", "tty", "tumblr", "turkish-lira-sign", "turn-down", "turn-up", "tv", "twitch", "twitter", "umbrella", "underline", "underline-o", "universal-access", "unlock", "up-down", "up-down-left-right", "up-long", "up-right-and-down-left-from-center", "up-right-from-square", "upload", "url", "usb", "user", "user-doctor", "user-group", "user-group-o", "user-group-simple-o", "user-minus", "user-o", "user-plus", "user-secret", "user-shield-o", "user-simple", "user-xmark", "users", "users-viewfinder", "utensils", "venus", "venus-double", "venus-mars", "verifier", "viacoin", "viadeo", "video", "video-simple", "video-simple-test", "vimeo", "vimeo-v", "vine", "visio-connect", "visioconference", "vk", "volume-high", "volume-low", "volume-off", "vulcain", "vulcain-customer", "vulcain-facturation", "vulcain-ptf", "vulcain-sales", "vulcain-technical", "w", "wand-magic-sparkles", "web-awesome-o", "webhooks", "wedoc", "weibo", "weixin", "whatsapp", "wheelchair", "wheelchair-move", "wifi", "wiki", "wikipedia-w", "window", "window-maximize", "window-maximize-o", "window-minimize", "window-restore", "window-restore-o", "windows", "won-sign", "wordpress", "workgroup", "wpbeginner", "wpexplorer", "wpforms", "wrench", "x-twitter", "xing", "xmark", "xmark-large", "xmark-large-o", "y-combinator", "yahoo", "yelp", "yen-sign", "yoast", "youtube", "zapier", "zoho"];
2
+ export declare function normalizeFontSpotIcon(name: string): string;
@@ -0,0 +1 @@
1
+ export declare const ICONS_LIST: readonly ["2fa", "500px", "accessibility", "accessible-icon", "actionplan", "activities", "address-book", "address-book-o", "address-card", "address-card-o", "admin-advanced", "admin-cog", "adn", "affinity", "album-img", "alert", "align-center", "align-center-o", "align-justify", "align-justify-o", "align-left", "align-left-o", "align-right", "align-right-o", "amazon", "anchor", "android", "angellist", "angle-down", "angle-left", "angle-right", "angle-up", "angles-down", "angles-left", "angles-right", "angles-up", "animated-meeting", "animations", "appearin", "appel", "apple", "application", "applications", "approuved", "arrow-down", "arrow-down-1-9", "arrow-down-9-1", "arrow-down-a-z", "arrow-down-short-wide", "arrow-down-wide-short", "arrow-down-z-a", "arrow-left", "arrow-pointer", "arrow-right", "arrow-rotate-left", "arrow-rotate-right", "arrow-up", "arrow-up-right-and-arrow-down-left", "arrow-up-to-line", "arrows-rotate", "arrows-up-down", "arrows-up-down-left-right", "article", "articletranslation", "articlewidget", "asei", "assetreservation", "asterisk", "at", "at-o", "audio-description", "backward", "backward-fast", "backward-step", "badges", "bag-shopping", "ban", "bandcamp", "barcode", "bars", "bars-progress", "basket-shopping", "bath", "battery-empty", "battery-full", "battery-half", "battery-quarter", "battery-three-quarters", "bed", "beer-mug-empty", "behance", "bell", "bell-o", "bell-ring-o", "bell-slash", "bell-slash-o", "bicycle", "binoculars", "bitbucket", "black-tie", "block-question", "block-question-o", "bluetooth", "bluetooth-b", "board", "boardcard", "boardlist", "boardreport", "bold", "bold-o", "bolt", "bolt-o", "bomb", "book", "book-bookmark", "bookmark", "bookmark-o", "bookmarks", "books", "bot", "box-archive", "braille", "briefcase", "btc", "bug", "building", "building-columns", "building-o", "bullhorn", "bullhorn-o", "bullseye", "bullseye-arrow", "bullseye-arrow-o", "bus", "business-directory", "businessdirectory", "businessmanagement", "buysellads", "cake-candles", "calculator", "calendar", "calendar-check", "calendar-check-o", "calendar-circle-user", "calendar-circle-user-o", "calendar-days", "calendar-days-lines", "calendar-lines-o", "calendar-minus-o", "calendar-o", "calendar-plus-o", "calendar-range-o", "calendar-xmark-o", "call-for-tender", "camera", "camera-o", "camera-retro", "camera-web", "car", "caret-down", "caret-left", "caret-right", "caret-up", "cart-arrow-down", "cart-plus", "cart-shopping", "cas", "cc-amex", "cc-diners-club", "cc-discover", "cc-jcb", "cc-mastercard", "cc-paypal", "cc-stripe", "cc-visa", "certificate", "cgu", "chart-area", "chart-bar", "chart-column", "chart-kanban", "chart-line", "chart-pie", "check", "check-o", "chevron-down", "chevron-down-o", "chevron-left", "chevron-left-o", "chevron-left-thick", "chevron-right", "chevron-right-o", "chevron-up", "chevron-up-o", "child", "chrome", "cicle-play-filled", "circle", "circle-3-scale", "circle-3-uniform", "circle-arrow-down", "circle-arrow-left", "circle-arrow-right", "circle-arrow-up", "circle-check", "circle-check-o", "circle-chevron-down", "circle-chevron-left", "circle-chevron-right", "circle-chevron-up", "circle-dot-o", "circle-down-o", "circle-exclamation", "circle-half-stroke", "circle-info", "circle-left-o", "circle-minus", "circle-notch", "circle-o", "circle-pause", "circle-pause-o", "circle-play", "circle-play-o", "circle-plus", "circle-question", "circle-question-o", "circle-right-o", "circle-stop", "circle-stop-o", "circle-up-o", "circle-user", "circle-user-o", "circle-xmark", "circle-xmark-o", "client", "clipboard-question", "clock", "clock-o", "clock-rotate-left", "clone", "clone-o", "closed-captioning-o", "cloud", "cloud-arrow-down", "cloud-arrow-up", "cloud-o", "code", "code-branch", "code-o", "codepen", "codiepie", "cog", "cogs", "comment", "comment-bubble-lines", "comment-captions-o", "comment-dots", "comment-dots-o", "comment-o", "comments", "comments-o", "communication-campaign", "community", "community-hook", "compass", "compass-o", "congratulate", "connectdevelop", "contact", "contact-card", "contacts", "contao", "content-report", "copy", "copy-o", "copyright", "copyright-o", "countdown", "creation", "creative-commons", "credit-card-o", "crisis", "crop", "crosshairs", "css3", "cube", "cubes", "custom", "custom-cgu", "dashcube", "database", "date-poll", "delicious", "desk", "desktop", "detectup", "deviantart", "diagram-venn", "diffgroup", "digg", "discover", "discovery", "document", "dollar-sign", "down-left-and-up-right-to-center", "down-long", "download", "dpo-applications", "dpo-awaiting-attention", "dpo-compliance", "dpo-compliance-todo", "dpo-dpia", "dpo-material", "dpo-process", "dpo-process-book", "dpo-process-security", "dpo-request", "dpo-rgpd-data-breach", "dpo-sub-process", "dpo-subcontractor", "dpolaunch", "draftio", "dribbble", "dropbox", "droplet", "drupal", "dw", "e-reputation", "ear-deaf", "ear-listen", "earth-americas", "earth-europe", "earth-europe-o", "edge", "edit", "eject", "ellipsis", "ellipsis-vertical", "embed", "empire", "envelope", "envelope-o", "envelope-open-o", "envira", "eraser", "etsy", "eudonet", "euro-sign", "event", "exclamation", "expeditedssl", "external-apps", "extra-bot", "eye", "eye-dropper", "eye-low-vision", "eye-o", "eye-slash", "eye-slash-o", "face-confused-o", "face-downcast-sweat-o", "face-frown-o", "face-grimace-o", "face-grin-beam", "face-grin-beam-sweat", "face-grin-hearts-o", "face-grin-squint", "face-grin-squint-tears", "face-grin-squint-tears-o", "face-grin-stars-o", "face-grin-tears", "face-grin-tears-o", "face-grin-wink-o", "face-kiss-wink-heart-o", "face-laugh-wink-o", "face-meh-o", "face-party-o", "face-smile", "face-smile-hearts", "face-smile-o", "face-smile-wink", "face-surprise", "face-tongue-money", "face-weary", "facebook", "facebook-f", "facture", "faq", "faqitem", "favorite", "favs", "favs-o", "fax", "file", "file-arrow-down", "file-arrow-down-o", "file-audio-o", "file-code-o", "file-excel-o", "file-image-o", "file-integrity", "file-lines", "file-lines-o", "file-lock", "file-o", "file-pdf-o", "file-pen", "file-powerpoint-o", "file-sync", "file-user", "file-user-o", "file-video-o", "file-word-o", "file-zipper-o", "filebank", "film", "filter", "filter-list", "fire", "fire-extinguisher", "firefox", "first-order", "flag", "flag-checkered", "flag-o", "flash-widgets", "flask", "flask-o", "flickr", "floppy-disk-o", "flux", "folder", "folder-closed", "folder-o", "folder-open", "folder-open-o", "folders", "font", "font-awesome", "fonticons", "formquestion", "fort-awesome", "forumbee", "forward", "forward-fast", "forward-step", "foursquare", "franceconnect", "free-code-camp", "fs-intranet", "funding", "futbol-o", "gallery-thumbnails", "gamepad", "gauge-high", "gavel", "gear", "gears", "gem-o", "genderless", "get-pocket", "gg", "gg-circle", "gift", "git", "github", "github-alt", "gitlab", "glide", "glide-g", "goal", "google", "google-2", "google-drive", "google-play", "google-plus", "google-plus-g", "google-wallet", "graduation-cap", "gratipay", "grav", "grid-2", "grip-dots", "grip-dots-o", "grip-dots-vertical", "grip-dots-vertical-o", "group", "hacker-news", "hammer", "hand", "hand-back-fist-o", "hand-holding-heart-o", "hand-lizard-o", "hand-o", "hand-peace-o", "hand-point-down-o", "hand-point-left-o", "hand-point-right-o", "hand-point-up-o", "hand-pointer-o", "hand-scissors-o", "hand-spock-o", "hand-wave-o", "hands", "hands-asl-interpreting", "hands-clapping-o", "handshake-o", "handshake-simple-o", "hard-drive-o", "hashtag", "head-side-brain", "head-side-brain-o", "head-side-gear", "head-side-gear-o", "heading", "headphones", "headset", "headset-o", "heart", "heart-o", "heart-pulse", "helpcenter", "hospital-o", "hotel", "hourglass", "hourglass-clock", "hourglass-clock-o", "hourglass-end", "hourglass-half", "hourglass-start", "house", "house-o", "houzz", "html5", "html5-device", "https", "i-cursor", "iasa", "id-badge", "id-badge-o", "id-card", "id-card-o", "idea", "identity-injection", "iframe", "image-o", "images", "images-o", "imdb", "inbox", "inbox-enveloppe", "inbox-o", "indent", "indian-rupee-sign", "indicateurs", "indicator", "industry", "info", "info-bubble", "infusion", "innovation-lab", "instagram", "instant-messenger", "internet-explorer", "intranet", "intranet-manage", "intranet-page", "invitations", "iop-content", "iop-last-online", "iop-register", "iop-signin", "iop-title", "ioxhost", "italic", "italic-o", "iziconf", "j-jamespot", "j-table", "j-table-column-plus-after", "j-table-column-plus-before", "j-table-column-remove", "j-table-merge-cells", "j-table-remove", "j-table-row-plus-after", "j-table-row-plus-before", "j-table-row-remove", "j-table-split-cell", "j-tripadvisor", "jamesbot", "jamespot", "jamespot-point", "jet-fighter", "jitsi", "jland", "job", "job-board", "joomla", "jsfiddle", "key", "key-o", "keyboard-o", "km", "lab", "language", "laptop", "lastfm", "lasuite-docs", "lasuite-fichers", "lasuite-france-transferts", "lasuite-grist", "lasuite-messagerie", "lasuite-resana", "lasuite-tchap", "lasuite-visio", "layout-fluid", "ldap", "lead", "leaf", "leanpub", "lecko", "left-long", "left-right", "lemon-o", "libreoffice", "life-ring", "lightbulb-o", "like", "link", "link-o", "link-simple-diagonal", "link-slash", "linkedin", "linkedin-in", "linode", "linux", "list", "list-check", "list-ol", "list-ol-o", "list-ul", "list-ul-o", "list-ul-round", "location-arrow", "location-dot", "location-dot-round", "lock", "magic-pad", "magic-wand", "magicpad", "magnet", "magnifying-glass", "magnifying-glass-minus", "magnifying-glass-minus-o", "magnifying-glass-plus", "magnifying-glass-plus-o", "mail2rse", "map", "map-o", "map-pin", "markdown", "mars", "mars-and-venus", "mars-double", "mars-stroke", "mars-stroke-right", "mars-stroke-up", "martini-glass-empty", "maxcdn", "maximize", "media-library", "medium", "meeting", "meetup", "megaphone-o", "membogo", "memo-pad-o", "mention", "menu", "mercury", "message-exclamation", "message-exclamation-o", "messages", "messages-o", "microchip", "microphone", "microphone-slash", "minus", "minus-o", "mixcloud", "mobile-check", "mobile-screen-button", "modx", "money-bill-1", "moon-o", "motorcycle", "mug-saucer", "music", "music-o", "network-wired", "neuter", "news", "newsflash", "newspaper", "newspaper-o", "note-sticky", "note-sticky-o", "notification-center", "notifications", "oauth", "object-group", "object-group-o", "object-ungroup", "object-ungroup-o", "odisae", "odnoklassniki", "offer", "office365", "online-edit", "opencart", "openid", "opera", "optin-monster", "orgcharts", "outdent", "package", "pagelines", "paintbrush", "paper-plane", "paper-plane-o", "paperclip", "paperclip-o", "paragraph", "partner", "paste", "pause", "paw", "paypal", "pen", "pen-o", "pen-short-end", "pen-to-square-o", "pencil", "pencil-o", "percent", "perfsuser", "person", "person-dress", "person-walking", "person-walking-with-cane", "personal-data", "phone", "phone-volume", "picture", "pied-piper", "pied-piper-alt", "pied-piper-pp", "pinterest", "pinterest-p", "plane", "plateform", "play", "plug", "plus", "podcast", "poll", "power-off", "print", "print-o", "process", "product-hunt", "project", "proxem", "publication", "publish", "puzzle-piece", "puzzle-piece-left-top", "qq", "qrcode", "question", "question-double", "quizz", "quora", "quote-left", "quote-right", "radar", "radar-o", "ravelry", "rebel", "recommandation", "rectangle-list-o", "rectangle-vertical-history", "rectangle-vertical-history-o", "rectangle-xmark", "rectangle-xmark-o", "recycle", "reddit", "reddit-alien", "registered", "registered-o", "regular-image-user-circle-play", "renren", "reply", "reply-all", "report", "reporting", "reservation", "retweet", "rgpdapplication", "rgpdcompliance", "rgpdcompliancetodo", "rgpdcrisis", "rgpdmaterial", "rgpdprocess", "rgpdregistry", "rgpdrequest", "rgpdsecurity", "rgpdsubcontractor", "right-from-bracket", "right-left", "right-long", "right-to-bracket", "road", "rocket", "rss", "rss-thick", "ruble-sign", "rupee-sign", "safari", "sale-point", "saml", "saml2", "scale-balanced", "scissors", "scribd", "secure-document", "sellcast", "sellsy", "server", "share", "share-from-square", "share-nodes", "share-nodes-o", "shared-content", "shekel-sign", "shield", "shield-check", "shield-check-o", "shield-o", "shielded-lock", "ship", "shirtsinbulk", "shop-simple", "shortcut", "shower", "shuffle", "shuttle-space", "sign-post", "signal", "signs-post", "simplybuilt", "site", "sitemap", "skyatlas", "skype", "slack", "slider-content", "sliders", "slideshare", "smartpage-code", "smartpage-form", "smartpage-group", "smartpage-image", "smartpage-imagetext", "smartpage-inscription", "smartpage-lien", "smartpage-list", "smartpage-news", "smartpage-parameters", "smartpage-slider", "smartpage-soundcloud", "smartpage-texte", "smartpage-titre", "smartpage-user", "smartpage-youtube", "snapchat", "snowflake-o", "social", "sort", "sort-down", "sort-up", "soundcloud", "sparkles", "sparkles-o", "spinner", "spoon", "spotify", "square", "square-behance", "square-caret-down-o", "square-caret-left-o", "square-caret-right-o", "square-caret-up-o", "square-check", "square-check-o", "square-envelope", "square-facebook", "square-git", "square-github", "square-google-plus", "square-h", "square-lastfm", "square-list", "square-minus", "square-minus-o", "square-o", "square-odnoklassniki", "square-pen", "square-phone", "square-pinterest", "square-plus", "square-plus-o", "square-poll-vertical", "square-poll-vertical-o", "square-reddit", "square-rss", "square-share-nodes", "square-snapchat", "square-steam", "square-tumblr", "square-twitter", "square-up-right", "square-viadeo", "square-vimeo", "square-xing", "square-xmark", "square-youtube", "stack-exchange", "stack-overflow", "star", "star-half", "star-half-stroke", "star-half-stroke-o", "star-o", "steam", "sterling-sign", "stethoscope", "stop", "stopwatch-20", "stopwatch-20-o", "street-view", "strikethrough", "strikethrough-o", "studio", "stumbleupon", "stumbleupon-circle", "subscript", "suggest", "suitcase", "suitcase-medical", "sun-o", "superpowers", "superscript", "support", "survey-date", "surveydate", "table", "table-cells", "table-cells-large", "table-columns", "table-group", "table-list", "tablet-screen-button", "tag", "tags", "targetinfo", "task", "tasks", "taxi", "taxonomy", "teamwork", "telegram", "temperature-empty", "temperature-full", "temperature-half", "temperature-quarter", "temperature-three-quarters", "tencent-weibo", "tender", "terminal", "text", "text-height", "text-indicator", "text-width", "themeisle", "thumbs-down", "thumbs-down-o", "thumbs-up", "thumbs-up-o", "thumbs-up-o", "thumbs-up-on", "thumbs-up-round", "thumbtack", "ticket", "todo", "toggle-off", "toggle-on", "tour", "trademark", "train", "train-subway", "transgender", "trash", "trash-can", "trash-can-o", "tree", "trello", "triangle-exclamation", "trophy", "truck", "truck-medical", "trustelem", "tty", "tumblr", "turkish-lira-sign", "turn-down", "turn-up", "tv", "twitch", "twitter", "umbrella", "underline", "underline-o", "universal-access", "unlock", "up-down", "up-down-left-right", "up-long", "up-right-and-down-left-from-center", "up-right-from-square", "upload", "url", "usb", "user", "user-doctor", "user-group", "user-group-o", "user-group-simple-o", "user-minus", "user-o", "user-plus", "user-secret", "user-shield-o", "user-simple", "user-xmark", "users", "users-viewfinder", "utensils", "venus", "venus-double", "venus-mars", "verifier", "viacoin", "viadeo", "video", "video-simple", "video-simple-test", "vimeo", "vimeo-v", "vine", "visio-connect", "visioconference", "vk", "volume-high", "volume-low", "volume-off", "vulcain", "vulcain-customer", "vulcain-facturation", "vulcain-ptf", "vulcain-sales", "vulcain-technical", "w", "wand-magic-sparkles", "web-awesome-o", "webhooks", "wedoc", "weibo", "weixin", "whatsapp", "wheelchair", "wheelchair-move", "wifi", "wiki", "wikipedia-w", "window", "window-maximize", "window-maximize-o", "window-minimize", "window-restore", "window-restore-o", "windows", "won-sign", "wordpress", "workgroup", "wpbeginner", "wpexplorer", "wpforms", "wrench", "x-twitter", "xing", "xmark", "xmark-large", "xmark-large-o", "y-combinator", "yahoo", "yelp", "yen-sign", "yoast", "youtube", "zapier", "zoho"];
@@ -0,0 +1,48 @@
1
+ /**
2
+ * iframeVideo — provider detection and URL transformation utilities.
3
+ *
4
+ * Centralises the regex / embed URL / thumbnail logic for the supported video
5
+ * providers. Pure functions, no React, no side effects beyond the thumbnail
6
+ * fetch (which calls public oEmbed endpoints from the providers themselves —
7
+ * no Jamespot backend involvement).
8
+ *
9
+ * Currently consumed: YouTube only (widget-youtube). The Vimeo / Dailymotion /
10
+ * Loom branches are intentional infra for upcoming widgets — do not remove
11
+ * without checking the corresponding ticket in the tracker.
12
+ */
13
+ export type Provider = 'youtube' | 'vimeo' | 'dailymotion' | 'loom';
14
+ export interface ParsedProvider {
15
+ provider: Provider;
16
+ videoId: string;
17
+ }
18
+ /**
19
+ * Type guard used by consumers to narrow a string-typed provider (e.g. coming
20
+ * from `JRCIframeVideoHelpers.toEmbedUrl` whose param is intentionally wide)
21
+ * back to the narrow `Provider` union before calling `toEmbedUrl` / `getThumbnailUrl`.
22
+ */
23
+ export declare function isKnownProvider(value: string): value is Provider;
24
+ /**
25
+ * Validate that the given string is an http/https URL with no dangerous scheme.
26
+ * Used as a defense-in-depth check before rendering anything iframe-related.
27
+ */
28
+ export declare function isSafeUrl(input: unknown): boolean;
29
+ /**
30
+ * Detect the video provider for an URL and extract the video id.
31
+ * Returns null if no supported provider matches.
32
+ */
33
+ export declare function parseProvider(url: string): ParsedProvider | null;
34
+ /**
35
+ * Build the embed iframe URL for a given provider + videoId.
36
+ * Always returns an https URL.
37
+ */
38
+ export declare function toEmbedUrl(parsed: ParsedProvider): string;
39
+ /**
40
+ * Resolve a thumbnail URL for a given provider + videoId.
41
+ *
42
+ * - YouTube: predictable static URL (no fetch needed).
43
+ * - Vimeo / Dailymotion: public oEmbed endpoint (no auth, cacheable by browser).
44
+ * - Loom: no public thumbnail API known — returns null, caller falls back.
45
+ */
46
+ export declare function getThumbnailUrl(parsed: ParsedProvider, publicUrl: string, options?: {
47
+ signal?: AbortSignal;
48
+ }): Promise<string | null>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jamespot-react-components",
3
- "version": "1.3.90",
3
+ "version": "1.3.92",
4
4
  "description": "",
5
5
  "main": "dist/jamespot-react-components.cjs",
6
6
  "module": "dist/jamespot-react-components.js",
@@ -59,8 +59,8 @@
59
59
  "eslint-plugin-storybook": "10.3.6",
60
60
  "globals": "^16.5.0",
61
61
  "html2canvas": "^1.4.1",
62
- "jamespot-front-business": "^1.3.90",
63
- "jamespot-user-api": "^1.3.90",
62
+ "jamespot-front-business": "^1.3.92",
63
+ "jamespot-user-api": "^1.3.92",
64
64
  "jsdom": "^26.1.0",
65
65
  "knip": "^5.88.1",
66
66
  "lint-staged": "^16.4.0",