jamespot-react-components 1.3.101 → 1.3.103

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.
Files changed (37) hide show
  1. package/dist/jamespot-react-components.cjs +1783 -1404
  2. package/dist/jamespot-react-components.js +12700 -11938
  3. package/dist/src/components/Filters/JRCFilterBar/JRCFilterBar.d.ts +15 -0
  4. package/dist/src/components/Filters/JRCFilterBar/JRCFilterBar.stories.d.ts +5 -0
  5. package/dist/src/components/Filters/JRCFilterChip/JRCFilterChip.d.ts +26 -0
  6. package/dist/src/components/Filters/JRCFilterChip/JRCFilterChip.stories.d.ts +7 -0
  7. package/dist/src/components/Filters/JRCFilterClearAll/JRCFilterClearAll.d.ts +8 -0
  8. package/dist/src/components/Filters/JRCFilterClearAll/JRCFilterClearAll.stories.d.ts +5 -0
  9. package/dist/src/components/Filters/JRCFilterPicker/JRCFilterPicker.d.ts +20 -0
  10. package/dist/src/components/Filters/JRCFilterPicker/JRCFilterPicker.stories.d.ts +7 -0
  11. package/dist/src/components/Filters/JRCPrimarySearch/JRCPrimarySearch.d.ts +24 -0
  12. package/dist/src/components/Filters/JRCPrimarySearch/JRCPrimarySearch.stories.d.ts +5 -0
  13. package/dist/src/components/Filters/types.d.ts +31 -0
  14. package/dist/src/components/Form/Input/JRCInputText/JRCInputText.style.d.ts +2 -1
  15. package/dist/src/components/Form/Input/JRCInputText/JRCInputTextIconButton.d.ts +12 -0
  16. package/dist/src/components/Form/Input/JRCInputTextRaw/JRCInputTextRaw.d.ts +1 -0
  17. package/dist/src/components/Form/Input/JRCInputTextRaw/JRCInputTextRaw.stories.d.ts +3 -0
  18. package/dist/src/components/Form/Input/JRCSelect/JRCInputSelect.style.d.ts +1 -1
  19. package/dist/src/components/Form/Input/JRCStyledInput.d.ts +1 -1
  20. package/dist/src/components/JRCCommentsBloc/components/{NewComment.d.ts → JRCNewComment.d.ts} +6 -3
  21. package/dist/src/components/JRCDropDown/JRCDropDown.d.ts +7 -1
  22. package/dist/src/components/JRCFileRow/JRCFileRow.d.ts +13 -0
  23. package/dist/src/components/JRCFileRow/JRCFileRow.stories.d.ts +8 -0
  24. package/dist/src/components/JRCFileRow/JRCFileRow.styles.d.ts +27 -0
  25. package/dist/src/components/JRCList/JRCList.d.ts +7 -1
  26. package/dist/src/components/JRCList/JRCList.styles.d.ts +2 -0
  27. package/dist/src/components/Widgets/JRCWidgetAttachment/JRCWidgetAttachment.d.ts +2 -24
  28. package/dist/src/components/Widgets/JRCWidgetEmbed/JRCWidgetEmbed.d.ts +4 -0
  29. package/dist/src/components/Widgets/JRCWidgetEmbed/JRCWidgetEmbed.stories.d.ts +8 -0
  30. package/dist/src/components/Widgets/JRCWidgetEmbed/JRCWidgetEmbedEditor.d.ts +12 -0
  31. package/dist/src/components/index.d.ts +20 -3
  32. package/dist/src/hooks/index.d.ts +1 -0
  33. package/dist/src/hooks/useHorizontalOverflow.d.ts +6 -0
  34. package/dist/src/styles/theme.d.ts +11 -1
  35. package/dist/src/translation/lang.json.d.ts +31 -0
  36. package/dist/src/types.d.ts +1 -0
  37. package/package.json +3 -3
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from 'react';
2
+ import { DataCy } from '../../../types/dataAttributes';
3
+ export interface JRCFilterBarProps extends DataCy {
4
+ /**
5
+ * All children (primary search, chips, picker, clear-all button) rendered inline
6
+ * in a flex-wrap row. The ordering of children is the layout order.
7
+ */
8
+ children: ReactNode;
9
+ }
10
+ /**
11
+ * Dumb layout wrapper for a filter bar: a column with one flex-wrap row for the
12
+ * filter controls. Empty-state handling and content composition are the consumer's
13
+ * responsibility — this component only provides the spacing and flex container.
14
+ */
15
+ export declare const JRCFilterBar: import('react').NamedExoticComponent<JRCFilterBarProps>;
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import { JRCFilterBarProps } from './JRCFilterBar';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Default: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFilterBarProps>;
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+ import { DataCy } from '../../../types/dataAttributes';
3
+ import { JRCFilterChipTag, JRCFilterField } from '../types';
4
+ export interface JRCFilterChipProps extends DataCy {
5
+ field: JRCFilterField;
6
+ /** Non-null string if the filter carries a displayable summary ("A, B, C", "≥ 10"…). */
7
+ summary?: string | null;
8
+ /** Whether the popover is open (controlled by the parent). */
9
+ isOpen: boolean;
10
+ /** Operator caption shown next to the field label in the popover header (e.g. "contains"). */
11
+ operatorLabel?: string;
12
+ /** Removable pills representing the individual values selected inside this filter. */
13
+ selectedTags?: JRCFilterChipTag[];
14
+ /** Input(s) to render inside the popover body. Injected by the consumer. */
15
+ children: ReactNode;
16
+ onToggle: () => void;
17
+ onRemove: () => void;
18
+ }
19
+ /**
20
+ * Dumb filter chip: a pill button that opens a popover containing filter inputs.
21
+ *
22
+ * The popover body is fully controlled by `children` — this component does NOT know
23
+ * about widgetType, value shape, or rendering logic. The consumer (layer 2) injects
24
+ * whatever input matches the filter's semantics.
25
+ */
26
+ export declare const JRCFilterChip: import('react').NamedExoticComponent<JRCFilterChipProps>;
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { JRCFilterChip } from './JRCFilterChip';
3
+ declare const meta: Meta<typeof JRCFilterChip>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof JRCFilterChip>;
6
+ export declare const Empty: Story;
7
+ export declare const WithValueAndTags: Story;
@@ -0,0 +1,8 @@
1
+ import { DataCy } from '../../../types/dataAttributes';
2
+ export interface JRCFilterClearAllProps extends DataCy {
3
+ onClick: () => void;
4
+ }
5
+ /**
6
+ * Dumb "Clear all filters" button. Styled as a discrete inline action next to the pills.
7
+ */
8
+ export declare const JRCFilterClearAll: import('react').NamedExoticComponent<JRCFilterClearAllProps>;
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import { JRCFilterClearAllProps } from './JRCFilterClearAll';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Default: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFilterClearAllProps>;
@@ -0,0 +1,20 @@
1
+ import { DataCy } from '../../../types/dataAttributes';
2
+ import { JRCFilterField } from '../types';
3
+ export interface JRCFilterPickerProps extends DataCy {
4
+ fields: JRCFilterField[];
5
+ activeFieldNames: Set<string>;
6
+ onSelect: (fieldName: string) => void;
7
+ }
8
+ /**
9
+ * Dumb filter picker: trigger + dropdown with searchable list of available fields.
10
+ *
11
+ * No dependency on widgetType, backend shape or i18n outside GLOBAL_Filter_*. The
12
+ * consumer passes a pre-built JRCFilterField[] (with icon/typeLabel already resolved)
13
+ * and a Set of names to mark as "already picked" (greyed out, not selectable).
14
+ *
15
+ * Open state, click-outside, Escape, and ARIA wiring (`aria-expanded`,
16
+ * `aria-controls`, `role="region"`) are delegated to `JRCDropDown`. The dynamic
17
+ * left/right alignment is computed on click before the dropdown mounts, so the
18
+ * initial render lands on the correct side without a flicker.
19
+ */
20
+ export declare const JRCFilterPicker: import('react').NamedExoticComponent<JRCFilterPickerProps>;
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { JRCFilterPicker } from './JRCFilterPicker';
3
+ declare const meta: Meta<typeof JRCFilterPicker>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof JRCFilterPicker>;
6
+ export declare const Default: Story;
7
+ export declare const WithActiveFields: Story;
@@ -0,0 +1,24 @@
1
+ import { DataCy } from '../../../types/dataAttributes';
2
+ export interface JRCPrimarySearchProps extends DataCy {
3
+ value: string;
4
+ onChange: (value: string) => void;
5
+ onSubmit?: () => void;
6
+ placeholder: string;
7
+ name?: string;
8
+ }
9
+ /**
10
+ * Controlled search input for filter bars (icon + Enter-to-submit). Wraps
11
+ * `JRCInputTextIconButtonRaw` which is itself controlled — needed because
12
+ * the surrounding `JFilterBar` syncs the value with its Redux state
13
+ * (`state.searchText`) and needs to reset/seed it programmatically (e.g.
14
+ * "Clear all filters", URL params hydration).
15
+ *
16
+ * Note: not replaceable by `JRCInputSearchRaw` which is non-controlled
17
+ * (state interne via `useDebouncedCallback`, no `value` prop). Switching
18
+ * would break the bidirectional sync with the filter bar state.
19
+ *
20
+ * The surrounding component decides what the input actually filters on
21
+ * (e.g. `title` in Studio View). `onChange` fires on every keystroke — the
22
+ * parent is expected to debounce if needed.
23
+ */
24
+ export declare const JRCPrimarySearch: import('react').NamedExoticComponent<JRCPrimarySearchProps>;
@@ -0,0 +1,5 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import { JRCPrimarySearchProps } from './JRCPrimarySearch';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Default: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCPrimarySearchProps>;
@@ -0,0 +1,31 @@
1
+ import { ReactNode } from 'react';
2
+ import { DataCy } from '../../types/dataAttributes';
3
+ /**
4
+ * Minimal field descriptor for the dumb Filter UI components.
5
+ *
6
+ * The layer-1 components have no knowledge of `widgetType` or any backend concept —
7
+ * they expose only what is needed for rendering: a stable `name`, a user-facing
8
+ * `label`, and optional presentation hints (`icon`, `typeLabel`). The upstream
9
+ * layer (react-core) maps a `widgetType` to these hints before passing the array in.
10
+ */
11
+ export interface JRCFilterField {
12
+ /** Stable identifier used as key and passed back in callbacks. */
13
+ name: string;
14
+ /** Display label (already translated if applicable). */
15
+ label: string;
16
+ /** Optional icon name rendered in the picker/chip (e.g. 'icon-text'). */
17
+ icon?: string;
18
+ /** Optional "type" caption displayed next to the label in the picker (e.g. "Text"). */
19
+ typeLabel?: string;
20
+ }
21
+ /** Selected value summary displayed as small removable pills inside a JRCFilterChip popover. */
22
+ export interface JRCFilterChipTag extends DataCy {
23
+ key: string;
24
+ label: string;
25
+ onRemove: () => void;
26
+ }
27
+ /** Props passed by a consumer that needs to render children inside the JRCFilterChip popover. */
28
+ export interface JRCFilterChipRenderProps {
29
+ field: JRCFilterField;
30
+ children?: ReactNode;
31
+ }
@@ -54,7 +54,8 @@ export declare const InputIconButton: import('styled-components/dist/types').ISt
54
54
  } & {
55
55
  $inputMargin?: string | undefined;
56
56
  } & import('react').RefAttributes<HTMLInputElement>, {
57
- $hasIconButtonAfter: boolean;
57
+ hasIconButtonAfter: boolean;
58
+ $inputMargin?: string;
58
59
  }>> & string & Omit<import('react').ForwardRefExoticComponent<Omit<import('react').InputHTMLAttributes<HTMLInputElement>, "css"> & import('../../../../types/dataAttributes').DataCy & {
59
60
  $error?: boolean;
60
61
  $valid?: boolean;
@@ -2,6 +2,7 @@ import { ComponentPropsWithoutRef } from 'react';
2
2
  import { DataCy } from '../../../../types/dataAttributes';
3
3
  export type JRCInputTextIconButtonProps = DataCy & ComponentPropsWithoutRef<'input'> & {
4
4
  iconBefore: string;
5
+ inputMargin?: string;
5
6
  iconButtonAfter?: {
6
7
  icon: string;
7
8
  onClick: () => void;
@@ -10,4 +11,15 @@ export type JRCInputTextIconButtonProps = DataCy & ComponentPropsWithoutRef<'inp
10
11
  srOnly?: string;
11
12
  };
12
13
  };
14
+ export declare const JRCInputTextIconButtonRaw: import('react').ForwardRefExoticComponent<DataCy & Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
15
+ iconBefore: string;
16
+ inputMargin?: string;
17
+ iconButtonAfter?: {
18
+ icon: string;
19
+ onClick: () => void;
20
+ ariaExpanded?: boolean;
21
+ ariaControls?: string;
22
+ srOnly?: string;
23
+ };
24
+ } & import('react').RefAttributes<HTMLInputElement>>;
13
25
  export declare function JRCInputTextIconButton(props: any): import("react/jsx-runtime").JSX.Element;
@@ -3,6 +3,7 @@ import { FieldError } from 'react-hook-form';
3
3
  import { JRCTooltipProps } from '../../../JRCTooltip/types';
4
4
  type JRCInputTextRawProps = ComponentPropsWithoutRef<'input'> & {
5
5
  margin?: string | undefined;
6
+ inputMargin?: string | undefined;
6
7
  width?: string | undefined;
7
8
  readOnly?: boolean;
8
9
  disabled?: boolean;
@@ -3,6 +3,7 @@ declare const _default: Meta;
3
3
  export default _default;
4
4
  export declare const InputTextRaw: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
5
5
  margin?: string | undefined;
6
+ inputMargin?: string | undefined;
6
7
  width?: string | undefined;
7
8
  readOnly?: boolean;
8
9
  disabled?: boolean;
@@ -17,6 +18,7 @@ export declare const InputTextRaw: import('storybook/internal/csf').AnnotatedSto
17
18
  }>;
18
19
  export declare const InputTextRawDisabled: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
19
20
  margin?: string | undefined;
21
+ inputMargin?: string | undefined;
20
22
  width?: string | undefined;
21
23
  readOnly?: boolean;
22
24
  disabled?: boolean;
@@ -31,6 +33,7 @@ export declare const InputTextRawDisabled: import('storybook/internal/csf').Anno
31
33
  }>;
32
34
  export declare const InputTextRawWithError: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
33
35
  margin?: string | undefined;
36
+ inputMargin?: string | undefined;
34
37
  width?: string | undefined;
35
38
  readOnly?: boolean;
36
39
  disabled?: boolean;
@@ -43,7 +43,7 @@ export declare const FlexBoxTreeDescription: import('styled-components/dist/type
43
43
  export declare const NoResult: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
44
44
  export declare const WrapperList: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
45
45
  export declare const ModalContentList: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
46
- export declare const NoOptionList: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('styled-components').FastOmit<import('react').DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "flex" | "position" | "x" | "y" | "padding" | "margin" | "textAlign" | "data-testid" | "direction" | "$inline" | "gap" | "childFull"> & Omit<import('../../../Common/FastCss').FastCssProps, "display"> & {
46
+ export declare const NoOptionList: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('styled-components').FastOmit<import('react').DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "flex" | "position" | "x" | "y" | "padding" | "margin" | "textAlign" | "data-testid" | "$inline" | "direction" | "gap" | "childFull"> & Omit<import('../../../Common/FastCss').FastCssProps, "display"> & {
47
47
  direction?: import('../../../JRCFlex/JRCFlexBox').FlexDirection;
48
48
  $inline?: boolean;
49
49
  flex?: boolean | string;
@@ -1,5 +1,5 @@
1
- import { DataCy } from '../../../types/dataAttributes';
2
1
  import { InputHTMLAttributes } from 'react';
2
+ import { DataCy } from '../../../types/dataAttributes';
3
3
  /**
4
4
  * Input state, if both booleans are false, the input is considered untouched or empty
5
5
  * @member error, the input is error regarding the validate hook
@@ -3,7 +3,7 @@ import { ReactNode } from 'react';
3
3
  import { DriveOrFilebank } from '../../Form/Input/JRCInputFileAdvanced/JRCInputFileAdvancedRaw';
4
4
  import { JRCInputTinyMCERawProps } from '../../Form/Input/JRCInputTinyMCERaw/JRCInputTinyMCERaw';
5
5
  import { TinyMCEExtension } from '../../Form/Input/JRCInputTinyMCERaw/types';
6
- type NewCommentProps = {
6
+ export type JRCNewCommentProps = {
7
7
  currentUser: jUserList;
8
8
  widgetListComponent: ReactNode;
9
9
  newWidgetsWrapperComponent: ReactNode;
@@ -18,6 +18,9 @@ type NewCommentProps = {
18
18
  socialQuestion?: boolean;
19
19
  deleteFile?: (id: number) => Promise<void>;
20
20
  additionalExtensions: Array<TinyMCEExtension>;
21
+ /** Open the TinyMCE editor on mount instead of waiting for a click on the placeholder. */
22
+ defaultExpanded?: boolean;
23
+ /** When false, the publish button is enabled even with empty content. Default true. */
24
+ requireContent?: boolean;
21
25
  };
22
- export declare const NewComment: ({ newWidgetsWrapperComponent, widgetListComponent, canComment, loading, currentUser, onComment, onError, tinyMCEConfig, token, activeDrives, canCreateWidget, socialQuestion, deleteFile, additionalExtensions, }: NewCommentProps) => import("react/jsx-runtime").JSX.Element;
23
- export {};
26
+ export declare const JRCNewComment: ({ newWidgetsWrapperComponent, widgetListComponent, canComment, loading, currentUser, onComment, onError, tinyMCEConfig, token, activeDrives, canCreateWidget, socialQuestion, deleteFile, additionalExtensions, defaultExpanded, requireContent, }: JRCNewCommentProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
1
  import { ReactElement, ReactNode } from 'react';
2
2
  import { Colors } from 'jamespot-front-business';
3
+ type DropDownPadding = 'mini' | 'small' | 'base' | 'medium' | 'large';
3
4
  export type JRCDropDownProps = {
4
5
  trigger: ReactElement | ((props: {
5
6
  role: 'button';
@@ -18,5 +19,10 @@ export type JRCDropDownProps = {
18
19
  width?: string;
19
20
  offset?: number;
20
21
  display?: 'inline' | 'block';
22
+ /** Box-shadow CSS value applied to the dropdown wrapper. Defaults to none. */
23
+ boxShadow?: string;
24
+ /** Inner padding of the dropdown wrapper. Defaults to `base` (8px). */
25
+ padding?: DropDownPadding;
21
26
  };
22
- export declare const JRCDropDown: ({ trigger, dropdown, align, onToggle, withBorder, borderColor, background, overflow, width, offset, display, }: JRCDropDownProps) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const JRCDropDown: ({ trigger, dropdown, align, onToggle, withBorder, borderColor, background, overflow, width, offset, display, boxShadow, padding, }: JRCDropDownProps) => import("react/jsx-runtime").JSX.Element;
28
+ export {};
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ import { DataCy } from '../../types/dataAttributes';
3
+ import { AttachmentDisplayValues } from './JRCFileRow.styles';
4
+ export interface JRCFileRowProps extends DataCy {
5
+ title: string;
6
+ size?: number;
7
+ mimetype?: string;
8
+ uri?: string;
9
+ display?: AttachmentDisplayValues;
10
+ onClick?: () => void;
11
+ action?: ReactNode;
12
+ }
13
+ export declare const JRCFileRow: ({ title, size, mimetype, uri, display, onClick, action, dataCy, }: JRCFileRowProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { Meta } from '@storybook/react-vite';
2
+ import { JRCFileRowProps } from './JRCFileRow';
3
+ declare const _default: Meta;
4
+ export default _default;
5
+ export declare const Primary: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFileRowProps>;
6
+ export declare const Large: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFileRowProps>;
7
+ export declare const DownloadOnly: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFileRowProps>;
8
+ export declare const NoAction: import('storybook/internal/csf').AnnotatedStoryFn<import('@storybook/react-vite').ReactRenderer, JRCFileRowProps>;
@@ -0,0 +1,27 @@
1
+ export declare const DISPLAYS: {
2
+ readonly medium: {
3
+ readonly avatar: 40;
4
+ readonly radius: "sm";
5
+ readonly space: "sm";
6
+ };
7
+ readonly large: {
8
+ readonly avatar: 80;
9
+ readonly radius: "md";
10
+ readonly space: "md";
11
+ };
12
+ };
13
+ export type AttachmentDisplayValues = keyof typeof DISPLAYS;
14
+ export declare const CSSWidgetAttachment: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
15
+ $display: AttachmentDisplayValues;
16
+ $clickable?: boolean;
17
+ }>> & string;
18
+ export declare const CSSWidgetAttachmentButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {
19
+ $display: AttachmentDisplayValues;
20
+ $clickable: boolean;
21
+ }>> & string;
22
+ export declare const CSSWidgetAttachmentActions: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
23
+ export declare const FileName: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
24
+ export declare const NameBase: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
25
+ export declare const NameExt: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
26
+ export declare const FileSize: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
27
+ export declare const TooltipName: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('../..').JRCBaseTooltipProps & import('react').RefAttributes<import('react-tooltip').TooltipRefProps>, never>> & string & Omit<import('react').ForwardRefExoticComponent<import('../..').JRCBaseTooltipProps & import('react').RefAttributes<import('react-tooltip').TooltipRefProps>>, keyof import('react').Component<any, {}, any>>;
@@ -1,5 +1,11 @@
1
- import { ColumnDef } from '@tanstack/react-table';
1
+ import { ColumnDef, RowData } from '@tanstack/react-table';
2
2
  import { Orders } from 'jamespot-user-api';
3
+ declare module '@tanstack/react-table' {
4
+ interface ColumnMeta<TData extends RowData, TValue> {
5
+ sticky?: 'left';
6
+ minWidth?: number;
7
+ }
8
+ }
3
9
  type LoadMorePagination = {
4
10
  type: 'loadMore';
5
11
  end: boolean;
@@ -5,6 +5,7 @@ export declare const Thead: import('styled-components/dist/types').IStyledCompon
5
5
  export declare const TBody: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>, never>> & string;
6
6
  export declare const Th: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>, {
7
7
  $width?: number | string;
8
+ $minWidth?: number;
8
9
  $sortable?: boolean;
9
10
  }>> & string;
10
11
  export declare const Tr: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, {
@@ -12,5 +13,6 @@ export declare const Tr: import('styled-components/dist/types').IStyledComponent
12
13
  }>> & string;
13
14
  export declare const Td: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>, {
14
15
  width?: number | string;
16
+ $minWidth?: number;
15
17
  }>> & string;
16
18
  export declare const LoadMore: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -1,24 +1,6 @@
1
1
  import { default as jamespot } from 'jamespot-user-api';
2
- declare const DISPLAYS: {
3
- readonly medium: {
4
- readonly avatar: 40;
5
- readonly radius: "sm";
6
- readonly space: "sm";
7
- };
8
- readonly large: {
9
- readonly avatar: 80;
10
- readonly radius: "md";
11
- readonly space: "md";
12
- };
13
- };
14
- export type AttachmentDisplayValues = keyof typeof DISPLAYS;
15
- export declare const CSSWidgetAttachment: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
16
- $display: AttachmentDisplayValues;
17
- }>> & string;
18
- export declare const CSSWidgetAttachmentButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {
19
- $display: AttachmentDisplayValues;
20
- }>> & string;
21
- export declare const CSSWidgetAttachmentActions: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
+ import { AttachmentDisplayValues } from '../../JRCFileRow/JRCFileRow.styles';
3
+ export type { AttachmentDisplayValues };
22
4
  export type JRCWidgetAttachmentProps = {
23
5
  files: {
24
6
  id: number;
@@ -39,8 +21,4 @@ export type JRCWidgetAttachmentProps = {
39
21
  inline?: boolean;
40
22
  display?: AttachmentDisplayValues;
41
23
  };
42
- /**
43
- * TODO: resolveFileMimetype should be done before
44
- */
45
24
  export declare const JRCWidgetAttachment: ({ files, inline, onClick, onDelete, onError, mocks, mode, display, }: JRCWidgetAttachmentProps) => import("react/jsx-runtime").JSX.Element;
46
- export {};
@@ -0,0 +1,4 @@
1
+ export type JRCWidgetEmbedProps = {
2
+ text?: string;
3
+ };
4
+ export declare const JRCWidgetEmbed: ({ text }: JRCWidgetEmbedProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { JRCWidgetEmbed } from './JRCWidgetEmbed';
3
+ declare const meta: Meta<typeof JRCWidgetEmbed>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof JRCWidgetEmbed>;
6
+ export declare const Iframe: Story;
7
+ export declare const RawHtml: Story;
8
+ export declare const Empty: Story;
@@ -0,0 +1,12 @@
1
+ import { WidgetEmbedContent } from 'jamespot-user-api';
2
+ import { JRCInputTinyMCERawProps } from '../../Form/Input/JRCInputTinyMCERaw/JRCInputTinyMCERaw';
3
+ import { TinyMCEExtension } from '../../Form/Input/JRCInputTinyMCERaw/types';
4
+ export interface JRCWidgetEmbedEditorProps {
5
+ uniqid: string;
6
+ content: WidgetEmbedContent;
7
+ onChangeContent: (uniqid: string, content: WidgetEmbedContent) => void;
8
+ token: string | undefined;
9
+ additionalExtensions?: Array<TinyMCEExtension>;
10
+ tinyMCECommonOptions?: Pick<JRCInputTinyMCERawProps, 'commonOptions' | 'mentionsQueries'> & Partial<Pick<JRCInputTinyMCERawProps, 'tinymceScriptSrc'>>;
11
+ }
12
+ export declare const JRCWidgetEmbedEditor: ({ uniqid, content, onChangeContent, token, additionalExtensions, tinyMCECommonOptions, }: JRCWidgetEmbedEditorProps) => import("react/jsx-runtime").JSX.Element;
@@ -9,6 +9,18 @@ export { Deprecated_JRCEllipsis } from './Deprecated/Deprecated_JRCEllipsis/Depr
9
9
  export { CSSEditorComponentSeparator } from './Editors/components/Editor.style';
10
10
  export { EditorButtonToggle } from './Editors/components/EditorButtonToggle';
11
11
  export { EditorCheckbox } from './Editors/components/EditorCheckbox';
12
+ export { JRCFilterBar } from './Filters/JRCFilterBar/JRCFilterBar';
13
+ export type { JRCFilterBarProps } from './Filters/JRCFilterBar/JRCFilterBar';
14
+ export { JRCFilterChip } from './Filters/JRCFilterChip/JRCFilterChip';
15
+ export type { JRCFilterChipProps } from './Filters/JRCFilterChip/JRCFilterChip';
16
+ export { JRCFilterClearAll } from './Filters/JRCFilterClearAll/JRCFilterClearAll';
17
+ export type { JRCFilterClearAllProps } from './Filters/JRCFilterClearAll/JRCFilterClearAll';
18
+ export { JRCFilterPicker } from './Filters/JRCFilterPicker/JRCFilterPicker';
19
+ export type { JRCFilterPickerProps } from './Filters/JRCFilterPicker/JRCFilterPicker';
20
+ export { JRCPrimarySearch } from './Filters/JRCPrimarySearch/JRCPrimarySearch';
21
+ export type { JRCPrimarySearchProps } from './Filters/JRCPrimarySearch/JRCPrimarySearch';
22
+ export type { JRCFilterChipRenderProps, JRCFilterChipTag, JRCFilterField } from './Filters/types';
23
+ export type { JRCIframeVideoHelpers, JRCIframeVideoProps } from './JRCIframeVideo/JRCIframeVideo';
12
24
  export { TextAlign, TextAlignOptions, TextFontWeight, TextFontWeightOptions } from './Widgets/const';
13
25
  export { JRCDriveDropbox } from './Drives/JRCDriveDropbox';
14
26
  export { JRCDriveMSGraph } from './Drives/JRCDriveMSGraph';
@@ -31,7 +43,7 @@ export { JRCInputSimpleFile } from './Form/Input/JRCInputSimpleFile/JRCInputSimp
31
43
  export { JRCInputSimpleFileRaw } from './Form/Input/JRCInputSimpleFile/JRCInputSimpleFileRaw';
32
44
  export { JRCInputPassword } from './Form/Input/JRCInputText/JRCInputPassword';
33
45
  export { JRCInputNumber, JRCInputText } from './Form/Input/JRCInputText/JRCInputText';
34
- export { JRCInputTextIconButton } from './Form/Input/JRCInputText/JRCInputTextIconButton';
46
+ export { JRCInputTextIconButton, JRCInputTextIconButtonRaw } from './Form/Input/JRCInputText/JRCInputTextIconButton';
35
47
  export { JRCInputTextarea } from './Form/Input/JRCInputTextarea/JRCInputTextarea';
36
48
  export { JRCInputTextareaRaw } from './Form/Input/JRCInputTextarea/JRCInputTextareaRaw';
37
49
  export { JRCInputTextRaw } from './Form/Input/JRCInputTextRaw/JRCInputTextRaw';
@@ -61,6 +73,7 @@ export { JRCAppLeftColumn } from './JRCAppLeftColumn/JRCAppLeftColumn';
61
73
  export { JRCAttachments } from './JRCAttachments/JRCAttachments';
62
74
  export { JRCAudience } from './JRCAudience/JRCAudience';
63
75
  export { JRCAvatar } from './JRCAvatar/JRCAvatar';
76
+ export { JRCFileRow } from './JRCFileRow/JRCFileRow';
64
77
  export { JRCAvatars } from './JRCAvatars/JRCAvatars';
65
78
  export { JRCButton } from './JRCButton/JRCButton';
66
79
  export { JRCValidationButton } from './JRCButton/JRCValidationButton';
@@ -77,6 +90,8 @@ export { JRCCollapse } from './JRCCollapse/JRCCollapse';
77
90
  export { JRCColumnCenter } from './JRCColumnCenter/JRCColumnCenter';
78
91
  export { JRCColumnLeft } from './JRCColumnLeft/JRCColumnLeft';
79
92
  export { JRCColumnRight } from './JRCColumnRight/JRCColumnRight';
93
+ export { JRCNewComment } from './JRCCommentsBloc/components/JRCNewComment';
94
+ export type { JRCNewCommentProps } from './JRCCommentsBloc/components/JRCNewComment';
80
95
  export { JRCCommentsBloc } from './JRCCommentsBloc/JRCCommentsBloc';
81
96
  export { JRCConfirmationModal } from './JRCConfirmationModal/JRCConfirmationModal';
82
97
  export { JRCCropImage } from './JRCCropImage/JRCCropImage';
@@ -149,6 +164,8 @@ export { JRCMainColumn } from './Templates/JRCMainColumn';
149
164
  export { JRCPanel } from './Templates/JRCPanel';
150
165
  export { JRCStepperPage } from './Templates/JRCStepperPage';
151
166
  export { JRCTemplateTwoColumns } from './Templates/JRCTwoColumns.template';
167
+ export { JRCWidgetAccessibility } from './Widgets/JRCWidgetAccessibility/JRCWidgetAccessibility';
168
+ export { JRCWidgetAccessibilityEditor } from './Widgets/JRCWidgetAccessibility/JRCWidgetAccessibilityEditor';
152
169
  export { JRCWidgetArticleGallery } from './Widgets/JRCWidgetArticleGallery/JRCWidgetArticleGallery';
153
170
  export { JRCWidgetArticleGalleryEditor } from './Widgets/JRCWidgetArticleGallery/JRCWidgetArticleGalleryEditor';
154
171
  export { ArticleSliderSlide } from './Widgets/JRCWidgetArticleSlider/components/ArticleSliderSlide';
@@ -166,8 +183,6 @@ export { JRCWidgetCalendarCalDav } from './Widgets/JRCWidgetCalendarCalDav/JRCWi
166
183
  export { JRCWidgetCalendarCalDavEditor } from './Widgets/JRCWidgetCalendarCalDav/JRCWidgetCalendarCalDavEditor';
167
184
  export { JRCWidgetCheckList } from './Widgets/JRCWidgetCheckList/JRCWidgetCheckList';
168
185
  export { JRCWidgetCheckListEditor } from './Widgets/JRCWidgetCheckList/JRCWidgetCheckListEditor';
169
- export { JRCWidgetAccessibility } from './Widgets/JRCWidgetAccessibility/JRCWidgetAccessibility';
170
- export { JRCWidgetAccessibilityEditor } from './Widgets/JRCWidgetAccessibility/JRCWidgetAccessibilityEditor';
171
186
  export { JRCWidgetBirthday } from './Widgets/JRCWidgetBirthday/JRCWidgetBirthday';
172
187
  export { JRCWidgetBirthdayEditor } from './Widgets/JRCWidgetBirthday/JRCWidgetBirthdayEditor';
173
188
  export { JRCWidgetColor } from './Widgets/JRCWidgetColor/JRCWidgetColor';
@@ -204,6 +219,8 @@ export { JRCWidgetTable } from './Widgets/JRCWidgetTable/JRCWidgetTable';
204
219
  export { JRCWidgetTableEditor } from './Widgets/JRCWidgetTable/JRCWidgetTableEditor';
205
220
  export { JRCWidgetText } from './Widgets/JRCWidgetText/JRCWidgetText';
206
221
  export { JRCWidgetTextEditor } from './Widgets/JRCWidgetText/JRCWidgetTextEditor';
222
+ export { JRCWidgetEmbed } from './Widgets/JRCWidgetEmbed/JRCWidgetEmbed';
223
+ export { JRCWidgetEmbedEditor } from './Widgets/JRCWidgetEmbed/JRCWidgetEmbedEditor';
207
224
  export { JRCWidgetUserProfile } from './Widgets/JRCWidgetUserProfile/JRCWidgetUserProfile';
208
225
  export { JRCWidgetUserProfileEditor } from './Widgets/JRCWidgetUserProfile/JRCWidgetUserProfileEditor';
209
226
  export { JRCWidgetWelcome } from './Widgets/JRCWidgetWelcome/JRCWidgetWelcome';
@@ -4,6 +4,7 @@ export { useApi } from './useApi';
4
4
  export { useCancelOnUnmount } from './useCancelOnUnmount';
5
5
  export { useDebounce } from './UseDebounce';
6
6
  export { useDidMountEffect } from './UseDidMountEffect';
7
+ export { useHorizontalOverflow } from './useHorizontalOverflow';
7
8
  export { useImageLoader } from './UseImageLoader';
8
9
  export { useKeyPress } from './UseKeyPress';
9
10
  export { useRefSize } from './useRefSize';
@@ -0,0 +1,6 @@
1
+ import { RefObject } from 'react';
2
+ export interface HorizontalOverflow {
3
+ left: boolean;
4
+ right: boolean;
5
+ }
6
+ export declare function useHorizontalOverflow(ref: RefObject<HTMLElement | null>, enabled?: boolean): HorizontalOverflow;
@@ -1,5 +1,5 @@
1
- import { DefaultTheme } from 'styled-components';
2
1
  import { ThemeConfigColorType, ThemeConfigOptions } from 'jamespot-front-business';
2
+ import { DefaultTheme } from 'styled-components';
3
3
  interface ITheme {
4
4
  config: DefaultTheme | undefined;
5
5
  get: () => DefaultTheme;
@@ -55,6 +55,16 @@ export type ThemeType = {
55
55
  xl: number;
56
56
  };
57
57
  size: ThemeSize;
58
+ transition: {
59
+ /**
60
+ * Standard duration for control-level transitions (hover, focus). New code should
61
+ * use `theme.transition.duration.fast` instead of hardcoding the value. Existing
62
+ * usages (JRCButton, JRCIframeVideo, etc.) will be migrated incrementally.
63
+ */
64
+ duration: {
65
+ fast: string;
66
+ };
67
+ };
58
68
  iconSize: {
59
69
  xs: number;
60
70
  sm: number;
@@ -161,6 +161,35 @@ declare const _default: {
161
161
  "FILE_Viewer_Preview": "Aperçu",
162
162
  "FOLDER_Nb_Elements": "Documents",
163
163
  "GLOBAL_A11Y_APP_NAV": "Menu of the application {appName}",
164
+ "GLOBAL_Filter_Add": "Add a filter",
165
+ "GLOBAL_Filter_Search": "Search a filter",
166
+ "GLOBAL_Filter_NoResults": "No matching filter",
167
+ "GLOBAL_Filter_Remove": "Remove this filter",
168
+ "GLOBAL_Filter_ClearAll": "Clear all filters",
169
+ "GLOBAL_Filter_Op_Contains": "contains",
170
+ "GLOBAL_Filter_Op_Between": "between",
171
+ "GLOBAL_Filter_Op_Is": "is",
172
+ "GLOBAL_Filter_Min": "Min",
173
+ "GLOBAL_Filter_Max": "Max",
174
+ "GLOBAL_Filter_Start": "Start",
175
+ "GLOBAL_Filter_End": "End",
176
+ "GLOBAL_Filter_From": "From",
177
+ "GLOBAL_Filter_To": "To",
178
+ "GLOBAL_Yes": "Yes",
179
+ "GLOBAL_No": "No",
180
+ "GLOBAL_Filter_Type_Text": "Text",
181
+ "GLOBAL_Filter_Type_Number": "Number",
182
+ "GLOBAL_Filter_Type_Select": "Select",
183
+ "GLOBAL_Filter_Type_Checkbox": "Checkbox",
184
+ "GLOBAL_Filter_Type_Toggle": "Toggle",
185
+ "GLOBAL_Filter_Type_Date": "Date",
186
+ "GLOBAL_Filter_Type_User": "User",
187
+ "GLOBAL_Filter_Type_Video": "Video",
188
+ "GLOBAL_IframeVideo_Play": "Play video",
189
+ "GLOBAL_IframeVideo_OpenInNewTab": "Open video in a new tab",
190
+ "GLOBAL_IframeVideo_InvalidUrl": "Invalid or unsafe URL",
191
+ "GLOBAL_IframeVideo_UnsupportedProvider": "Unsupported video provider",
192
+ "GLOBAL_IframeVideo_LoadingThumbnail": "Loading preview",
164
193
  "GLOBAL_Action_Missing_License": "🔐 The license of the app is not active on your platform!",
165
194
  "GLOBAL_Add_File": "Add file",
166
195
  "GLOBAL_Add_Image": "Add image",
@@ -499,6 +528,8 @@ declare const _default: {
499
528
  "WIDGET_Welcome_Default_Message": "Bienvenue",
500
529
  "WIDGET_Welcome_Linebreak_Label": "Saut de ligne (après le message)",
501
530
  "WIDGET_Welcome": "Message d'accueil",
531
+ "WIDGET_Embed": "Embed",
532
+ "WIDGET_Embed_Text": "Embed external HTML content (iframe, integration code)",
502
533
  "WIDGET_Youtube_Url": "Video URL",
503
534
  "WIDGET_Youtube": "Video",
504
535
  "WIDGET_Youtube_Text": "Embed a YouTube video",