{ "version": 3, "sources": ["../../../../../../node_modules/is-plain-obj/index.js", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/blocks.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/inlines.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/marks.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/schemaConstraints.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/emptyDocument.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/helpers.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/errors.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/assert.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/node.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/path.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/text.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/node_modules/@contentful/rich-text-types/src/validator/index.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/src/util/appendKeyToValidElement.ts", "../../../../../../node_modules/@contentful/rich-text-react-renderer/src/util/nodeListToReactComponents.tsx", "../../../../../../node_modules/@contentful/rich-text-react-renderer/src/index.tsx", "../../../../../../node_modules/@contentful/rich-text-types/src/blocks.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/inlines.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/marks.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/schemaConstraints.ts", "../../../../../../node_modules/@contentful/rich-text-types/dist/types.js", "../../../../../../node_modules/@contentful/rich-text-types/dist/nodeTypes.js", "../../../../../../node_modules/@contentful/rich-text-types/src/emptyDocument.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/helpers.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/schemas/index.ts", "../../../../../../node_modules/@contentful/rich-text-types/src/index.ts", "../../../../../../internal/esbuild/entrypoints/modern/classic/discover.ts", "sentry-debug-id-stub:_sentry-debug-id-injection-stub?sentry-module-id=eb28918b-8733-45a0-b092-49ac24311f0b", "../../../../../../internal/esbuild/entrypoints/modern/classic/discover.ts", "../../src/modern/features/discover/index.tsx", "../../src/modern/components/Menu/Sausage/index.js", "../../src/modern/components/Menu/Sausage/item.js", "../../src/modern/components/Menu/Sausage/list.js", "../../src/modern/features/discover/utils/data.ts", "../../src/modern/features/discover/hooks/usePartnersOperation.ts", "../../src/modern/features/discover/UFE.ts", "../../src/modern/features/discover/components/Partners.tsx", "../../../../../../owl-nest/common/rich-text/src/RichText.tsx", "../../src/modern/features/discover/views/SearchSection.tsx", "../../src/modern/features/discover/hooks/useSearch.ts", "../../src/modern/features/discover/utils/filters.ts", "../../src/modern/features/discover/components/searchbar/index.tsx", "../../src/modern/features/discover/components/searchbar/AutosizeInput.tsx", "../../src/modern/features/discover/components/filtersbar/index.tsx", "../../src/modern/features/discover/components/filtersbar/MobileFiltersList.tsx", "../../src/modern/features/discover/components/filtersbar/HorizontalScroller.tsx", "../../src/modern/features/discover/components/filtersbar/styles.ts", "../../src/modern/features/discover/components/filtersbar/DesktopFiltersList.tsx", "../../src/modern/features/discover/components/filtersbar/FilterOptionsList.tsx", "../../src/modern/features/discover/components/noresults/index.tsx", "../../src/modern/features/discover/components/results/index.tsx"], "sourcesContent": ["'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n", "/**\n * Map of all Contentful block types. Blocks contain inline or block nodes.\n */\nexport enum BLOCKS {\n DOCUMENT = 'document',\n PARAGRAPH = 'paragraph',\n\n HEADING_1 = 'heading-1',\n HEADING_2 = 'heading-2',\n HEADING_3 = 'heading-3',\n HEADING_4 = 'heading-4',\n HEADING_5 = 'heading-5',\n HEADING_6 = 'heading-6',\n\n OL_LIST = 'ordered-list',\n UL_LIST = 'unordered-list',\n LIST_ITEM = 'list-item',\n\n HR = 'hr',\n QUOTE = 'blockquote',\n\n EMBEDDED_ENTRY = 'embedded-entry-block',\n EMBEDDED_ASSET = 'embedded-asset-block',\n EMBEDDED_RESOURCE = 'embedded-resource-block',\n\n TABLE = 'table',\n TABLE_ROW = 'table-row',\n TABLE_CELL = 'table-cell',\n TABLE_HEADER_CELL = 'table-header-cell',\n}\n", "/**\n * Map of all Contentful inline types. Inline contain inline or text nodes.\n *\n * @note This should be kept in alphabetical order since the\n * [validation package](https://github.com/contentful/content-stack/tree/master/packages/validation)\n * relies on the values being in a predictable order.\n */\nexport enum INLINES {\n ASSET_HYPERLINK = 'asset-hyperlink',\n EMBEDDED_ENTRY = 'embedded-entry-inline',\n EMBEDDED_RESOURCE = 'embedded-resource-inline',\n ENTRY_HYPERLINK = 'entry-hyperlink',\n HYPERLINK = 'hyperlink',\n RESOURCE_HYPERLINK = 'resource-hyperlink',\n}\n", "/**\n * Map of all Contentful marks.\n */\nexport enum MARKS {\n BOLD = 'bold',\n ITALIC = 'italic',\n UNDERLINE = 'underline',\n CODE = 'code',\n SUPERSCRIPT = 'superscript',\n SUBSCRIPT = 'subscript',\n STRIKETHROUGH = 'strikethrough',\n}\n", "import { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\nimport { MARKS } from './marks';\n\nexport type TopLevelBlockEnum =\n | BLOCKS.PARAGRAPH\n | BLOCKS.HEADING_1\n | BLOCKS.HEADING_2\n | BLOCKS.HEADING_3\n | BLOCKS.HEADING_4\n | BLOCKS.HEADING_5\n | BLOCKS.HEADING_6\n | BLOCKS.OL_LIST\n | BLOCKS.UL_LIST\n | BLOCKS.HR\n | BLOCKS.QUOTE\n | BLOCKS.EMBEDDED_ENTRY\n | BLOCKS.EMBEDDED_ASSET\n | BLOCKS.EMBEDDED_RESOURCE\n | BLOCKS.TABLE;\n\n/**\n * Array of all top level block types.\n * Only these block types can be the direct children of the document.\n */\nexport const TOP_LEVEL_BLOCKS: TopLevelBlockEnum[] = [\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n BLOCKS.TABLE,\n];\n\nexport type ListItemBlockEnum =\n | BLOCKS.PARAGRAPH\n | BLOCKS.HEADING_1\n | BLOCKS.HEADING_2\n | BLOCKS.HEADING_3\n | BLOCKS.HEADING_4\n | BLOCKS.HEADING_5\n | BLOCKS.HEADING_6\n | BLOCKS.OL_LIST\n | BLOCKS.UL_LIST\n | BLOCKS.HR\n | BLOCKS.QUOTE\n | BLOCKS.EMBEDDED_ENTRY\n | BLOCKS.EMBEDDED_ASSET\n | BLOCKS.EMBEDDED_RESOURCE;\n\n/**\n * Array of all allowed block types inside list items\n */\nexport const LIST_ITEM_BLOCKS: TopLevelBlockEnum[] = [\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n];\n\nexport const TABLE_BLOCKS = [\n BLOCKS.TABLE,\n BLOCKS.TABLE_ROW,\n BLOCKS.TABLE_CELL,\n BLOCKS.TABLE_HEADER_CELL,\n];\n\n/**\n * Array of all void block types\n */\nexport const VOID_BLOCKS = [\n BLOCKS.HR,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n];\n\n/**\n * Dictionary of all container block types, and the set block types they accept as children.\n *\n * Note: This does not include `[BLOCKS.DOCUMENT]: TOP_LEVEL_BLOCKS`\n */\nexport const CONTAINERS = {\n [BLOCKS.OL_LIST]: [BLOCKS.LIST_ITEM],\n [BLOCKS.UL_LIST]: [BLOCKS.LIST_ITEM],\n [BLOCKS.LIST_ITEM]: LIST_ITEM_BLOCKS,\n [BLOCKS.QUOTE]: [BLOCKS.PARAGRAPH],\n [BLOCKS.TABLE]: [BLOCKS.TABLE_ROW],\n [BLOCKS.TABLE_ROW]: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],\n [BLOCKS.TABLE_CELL]: [BLOCKS.PARAGRAPH, BLOCKS.UL_LIST, BLOCKS.OL_LIST],\n [BLOCKS.TABLE_HEADER_CELL]: [BLOCKS.PARAGRAPH],\n};\n\n/**\n * Array of all heading levels\n */\nexport const HEADINGS = [\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n];\n\n/**\n * Array of all block types that may contain text and inline nodes.\n */\nexport const TEXT_CONTAINERS = [BLOCKS.PARAGRAPH, ...HEADINGS];\n\n/**\n * Node types before `tables` release.\n */\nexport const V1_NODE_TYPES = [\n BLOCKS.DOCUMENT,\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.LIST_ITEM,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n INLINES.HYPERLINK,\n INLINES.ENTRY_HYPERLINK,\n INLINES.ASSET_HYPERLINK,\n INLINES.EMBEDDED_ENTRY,\n 'text',\n];\n\n/**\n * Marks before `superscript` & `subscript` release.\n */\nexport const V1_MARKS = [MARKS.BOLD, MARKS.CODE, MARKS.ITALIC, MARKS.UNDERLINE];\n", "import { BLOCKS } from './blocks';\nimport { Document } from './types';\n\n/**\n * A rich text document considered to be empty.\n * Any other document structure than this is not considered empty.\n */\nexport const EMPTY_DOCUMENT: Document = {\n nodeType: BLOCKS.DOCUMENT,\n data: {},\n content: [\n {\n nodeType: BLOCKS.PARAGRAPH,\n data: {},\n content: [\n {\n nodeType: 'text',\n value: '',\n marks: [],\n data: {},\n },\n ],\n },\n ],\n};\n", "import { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\nimport { Block, Inline, Node, Text, Document as CDocument } from './types';\n\n/**\n * Tiny replacement for Object.values(object).includes(key) to\n * avoid including CoreJS polyfills\n */\nfunction hasValue(obj: Record, value: unknown) {\n for (const key of Object.keys(obj)) {\n if (value === obj[key]) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Checks if the node is an instance of Inline.\n */\nexport function isInline(node: Node): node is Inline {\n return hasValue(INLINES, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Block.\n */\nexport function isBlock(node: Node): node is Block {\n return hasValue(BLOCKS, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Text.\n */\nexport function isText(node: Node): node is Text {\n return node.nodeType === 'text';\n}\n\n/**\n * Checks if a paragraph is empty (has only one child and that child is an empty string text node)\n */\nexport function isEmptyParagraph(node: Block): boolean {\n if (node.nodeType !== BLOCKS.PARAGRAPH) {\n return false;\n }\n\n if (node.content.length !== 1) {\n return false;\n }\n\n const textNode = node.content[0];\n return textNode.nodeType === 'text' && (textNode as Text).value === '';\n}\n\nfunction isValidDocument(document: unknown): document is CDocument {\n return (\n document != null &&\n typeof document === 'object' &&\n 'content' in document &&\n Array.isArray((document as CDocument).content)\n );\n}\n\nconst MIN_NODES_FOR_STRIPPING = 2;\n\n/**\n * Strips empty trailing paragraph from a document if enabled\n * @param document - The rich text document to process\n * @returns A new document with the empty trailing paragraph removed (if conditions are met)\n * @example\n * const processedDoc = stripEmptyTrailingParagraphFromDocument(document);\n */\nexport function stripEmptyTrailingParagraphFromDocument(document: CDocument): CDocument {\n if (!isValidDocument(document) || document.content.length < MIN_NODES_FOR_STRIPPING) {\n return document;\n }\n\n const lastNode = document.content[document.content.length - 1];\n\n // Check if the last node is an empty paragraph\n if (isEmptyParagraph(lastNode)) {\n return {\n ...document,\n content: document.content.slice(0, -1),\n };\n }\n\n return document;\n}\n", "import { ValidationError } from '.';\nimport type { Path } from './path';\n\nexport const typeMismatchError = ({\n path,\n property,\n typeName,\n value,\n}: {\n path: Path;\n property: string | number;\n typeName: string;\n value: any;\n}): ValidationError => {\n return {\n details: `The type of \"${property}\" is incorrect, expected type: ${typeName}`,\n name: 'type',\n path: path.toArray(),\n type: typeName,\n value,\n };\n};\n\nexport const minSizeError = ({\n min,\n value,\n path,\n}: {\n min: number;\n value: any;\n path: Path;\n}): ValidationError => {\n return {\n name: 'size',\n min,\n path: path.toArray(),\n details: `Size must be at least ${min}`,\n value,\n };\n};\n\nexport const maxSizeError = ({\n max,\n value,\n path,\n}: {\n max: number;\n value: any;\n path: Path;\n}): ValidationError => {\n return {\n name: 'size',\n max,\n path: path.toArray(),\n details: `Size must be at most ${max}`,\n value,\n };\n};\n\nexport const enumError = ({\n expected,\n value,\n path,\n}: {\n expected: string[];\n value: any;\n path: Path;\n}): ValidationError => {\n return {\n details: `Value must be one of expected values`,\n name: 'in',\n expected: [...expected].sort(),\n path: path.toArray(),\n value,\n };\n};\n\nexport const unknownPropertyError = ({\n property,\n path,\n}: {\n property: string;\n path: Path;\n}): ValidationError => {\n return {\n details: `The property \"${property}\" is not expected`,\n name: 'unexpected',\n path: path.toArray(),\n };\n};\n\nexport const requiredPropertyError = ({\n property,\n path,\n}: {\n property: string;\n path: Path;\n}): ValidationError => {\n return {\n details: `The property \"${property}\" is required here`,\n name: 'required',\n path: path.toArray(),\n };\n};\n", "import isPlainObject from 'is-plain-obj';\n\nimport { ValidationError } from '.';\nimport {\n maxSizeError,\n typeMismatchError,\n enumError,\n unknownPropertyError,\n requiredPropertyError,\n minSizeError,\n} from './errors';\nimport type { Path } from './path';\n\nexport class ObjectAssertion {\n private _errors: ValidationError[] = [];\n\n constructor(\n private readonly obj: Record,\n private readonly path: Path,\n ) {}\n\n catch = (...errors: ValidationError[]): void => {\n this._errors.push(...errors);\n };\n\n get errors(): ValidationError[] {\n const serializeError = (error: ValidationError): string =>\n JSON.stringify({\n details: error.details,\n path: error.path,\n });\n\n return this._errors.filter(\n (error, index) =>\n this._errors.findIndex((step) => serializeError(error) === serializeError(step)) === index,\n );\n }\n\n /**\n * Asserts the key exists in the object. You probably shouldn't call this\n * function directly. Instead, use `$.object`, `$.number`, `$.string`, etc.\n */\n exists = (key: string): boolean => {\n if (key in this.obj) {\n return true;\n }\n\n this.catch(\n requiredPropertyError({\n property: key,\n path: this.path.of(key),\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the key exists in the object and its value is a plain object. if\n * no key is provided, it asserts the object itself.\n */\n public object = (key?: string): boolean => {\n const value = key ? this.obj[key] : this.obj;\n\n if (key) {\n if (!this.exists(key)) {\n return false;\n }\n }\n\n if (isPlainObject(value)) {\n return true;\n }\n\n const path = key ? this.path.of(key) : this.path;\n const property = key ?? this.path.last() ?? 'value';\n\n this.catch(\n typeMismatchError({\n typeName: 'Object',\n property,\n path,\n value,\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the key exists in the object and its value is a string.\n */\n public string = (key: string): boolean => {\n const value = this.obj[key];\n\n if (key && !this.exists(key)) {\n return false;\n }\n\n if (typeof value === 'string') {\n return true;\n }\n\n this.catch(\n typeMismatchError({\n typeName: 'String',\n property: key,\n path: this.path.of(key),\n value,\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the key exists in the object and its value is a number.\n */\n public number = (key: string, optional?: boolean): boolean => {\n const value = this.obj[key];\n\n if (optional && !(key in this.obj)) {\n return true;\n }\n\n if (!this.exists(key)) {\n return false;\n }\n\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return true;\n }\n\n this.catch(\n typeMismatchError({\n typeName: 'Number',\n property: key,\n path: this.path.of(key),\n value,\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the key exists in the object and its value is an array. You don't\n * need to manually call this function before `$.each` or `$.maxLength`.\n */\n public array = (key: string): boolean => {\n const value = this.obj[key];\n\n if (key && !this.exists(key)) {\n return false;\n }\n\n if (Array.isArray(value)) {\n return true;\n }\n\n this.catch(\n typeMismatchError({\n typeName: 'Array',\n property: key,\n path: this.path.of(key),\n value,\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the value of the key is one of the expected values.\n */\n public enum = (key: string, expected: string[]): boolean => {\n const value = this.obj[key];\n\n if (typeof value === 'string' && expected.includes(value)) {\n return true;\n }\n\n this.catch(\n enumError({\n expected,\n value,\n path: this.path.of(key),\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the array value of the object key is empty. If the value isn't an\n * array, the function captures a type error and returns false.\n */\n public empty = (key: string): boolean => {\n if (!this.array(key)) {\n return false;\n }\n\n const value = this.obj[key] as Array;\n\n if (value.length === 0) {\n return true;\n }\n\n this.catch(\n maxSizeError({\n max: 0,\n value,\n path: this.path.of(key),\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the length of the value of the object key is at least `min`. If the\n * value isn't an array, the function captures a type error and returns false.\n */\n public minLength = (key: string, min: number): boolean => {\n if (!this.array(key)) {\n return false;\n }\n\n const value = this.obj[key] as Array;\n\n if (value.length >= min) {\n return true;\n }\n\n this.catch(\n minSizeError({\n min,\n value,\n path: this.path.of(key),\n }),\n );\n\n return false;\n };\n\n /**\n * Asserts the object has no additional properties other than the ones\n * specified\n */\n public noAdditionalProperties = (properties: string[]): boolean => {\n const unknowns = Object.keys(this.obj)\n .sort()\n .filter((key) => !properties.includes(key));\n\n unknowns.forEach((property) =>\n this.catch(\n unknownPropertyError({\n property,\n path: this.path.of(property),\n }),\n ),\n );\n\n return unknowns.length === 0;\n };\n\n /**\n * Iterates over the value of the key and assert each item. If the value isn't\n * an array, the function captures a type error and safely exits.\n *\n * To maintain compatibility with previous implementation, we stop early if we\n * find any errors.\n */\n public each = (key: string, assert: (item: any, path: Path) => ValidationError[]): void => {\n if (!this.array(key)) {\n return;\n }\n\n const value = this.obj[key] as Array;\n\n let foundErrors = false;\n value.forEach((item, index) => {\n if (foundErrors) {\n return;\n }\n\n const errors = assert(item, this.path.of(key).of(index));\n\n if (errors.length > 0) {\n foundErrors = true;\n }\n\n this.catch(...errors);\n });\n };\n}\n", "import { ValidationError } from '.';\nimport {\n AssetHyperlink,\n AssetLinkBlock,\n EntryHyperlink,\n EntryLinkBlock,\n Hyperlink,\n ResourceLinkBlock,\n ResourceLinkInline,\n} from '../nodeTypes';\nimport { Block, Document, Inline } from '../types';\nimport { ObjectAssertion } from './assert';\nimport type { Path } from './path';\n\nexport type Node = Document | Block | Inline;\n\nexport type GetContentRule =\n | string[]\n | ((\n node: T,\n path: Path,\n ) => {\n nodeTypes: string[];\n min?: number;\n });\n\nexport type ValidateData = (data: T['data'], path: Path) => ValidationError[];\n\nexport const VOID_CONTENT: GetContentRule = [];\n\nexport class NodeAssertion {\n constructor(\n private contentRule: GetContentRule,\n private validateData?: ValidateData,\n ) {}\n\n assert(node: T, path: Path): ValidationError[] {\n const $ = new ObjectAssertion(node, path);\n\n if (!$.object()) {\n return $.errors;\n }\n\n $.noAdditionalProperties(['nodeType', 'data', 'content']);\n\n const { nodeTypes, min = 0 } = Array.isArray(this.contentRule)\n ? {\n nodeTypes: this.contentRule,\n }\n : this.contentRule(node, path);\n\n if (nodeTypes.length === 0 && min > 0) {\n throw new Error(\n `Invalid content rule. Cannot have enforce a 'min' of ${min} with no nodeTypes`,\n );\n }\n\n $.minLength('content', min);\n\n // Is void\n if (nodeTypes.length === 0) {\n $.empty('content');\n }\n\n // Ensure content nodes have valid nodeTypes without validating the full\n // shape which is something that's only done later if the current node is\n // valid.\n else {\n $.each('content', (item, path) => {\n const item$ = new ObjectAssertion(item, path);\n\n if (!item$.object()) {\n return item$.errors;\n }\n\n item$.enum('nodeType', nodeTypes);\n\n return item$.errors;\n });\n }\n\n if ($.object('data')) {\n const dataErrors = this.validateData?.(node.data, path.of('data')) ?? [];\n $.catch(...dataErrors);\n }\n\n return $.errors;\n }\n}\n\nexport class EntityLinkAssertion<\n T extends\n | EntryLinkBlock\n | EntryHyperlink\n | AssetLinkBlock\n | AssetHyperlink\n | ResourceLinkBlock\n | ResourceLinkInline,\n> extends NodeAssertion {\n private type: 'ResourceLink' | 'Link';\n\n constructor(\n private linkType: 'Entry' | 'Asset' | 'Contentful:Entry',\n contentNodeTypes: GetContentRule,\n ) {\n super(contentNodeTypes, (data, path) => this.assertLink(data, path));\n this.type = this.linkType.startsWith('Contentful:') ? 'ResourceLink' : 'Link';\n }\n\n private assertLink = (data: T['data'], path: Path): ValidationError[] => {\n const $ = new ObjectAssertion(data, path);\n\n if ($.object('target')) {\n const sys$ = new ObjectAssertion(data.target.sys, path.of('target').of('sys'));\n\n if (sys$.object()) {\n sys$.enum('type', [this.type]);\n sys$.enum('linkType', [this.linkType]);\n\n if (this.type === 'Link') {\n sys$.string('id');\n sys$.noAdditionalProperties(['type', 'linkType', 'id']);\n } else if (this.type === 'ResourceLink') {\n sys$.string('urn');\n sys$.noAdditionalProperties(['type', 'linkType', 'urn']);\n }\n }\n\n $.catch(...sys$.errors);\n }\n\n $.noAdditionalProperties(['target']);\n\n return $.errors;\n };\n}\n\nexport class HyperLinkAssertion extends NodeAssertion {\n constructor() {\n super(['text'], (data, path) => this.assertLink(data, path));\n }\n\n private assertLink = (data: T['data'], path: Path): ValidationError[] => {\n const $ = new ObjectAssertion(data, path);\n\n $.string('uri');\n $.noAdditionalProperties(['uri']);\n\n return $.errors;\n };\n}\n\nexport const assert = (\n contentRule: GetContentRule,\n validateData?: ValidateData,\n): NodeAssertion => {\n return new NodeAssertion(contentRule, validateData);\n};\n\nexport const assertLink = <\n T extends\n | EntryLinkBlock\n | EntryHyperlink\n | AssetLinkBlock\n | AssetHyperlink\n | ResourceLinkBlock\n | ResourceLinkInline,\n>(\n linkType: 'Entry' | 'Asset' | 'Contentful:Entry',\n contentRule: GetContentRule,\n): EntityLinkAssertion => {\n return new EntityLinkAssertion(linkType, contentRule);\n};\n", "export class Path {\n constructor(private readonly path: (string | number)[] = []) {}\n\n of = (element: string | number): Path => {\n return new Path([...this.path, element]);\n };\n\n isRoot = (): boolean => {\n return this.path.length === 0;\n };\n\n last = (): string | number | undefined => {\n return this.path[this.path.length - 1];\n };\n\n toArray = (): (string | number)[] => {\n return this.path;\n };\n}\n", "import { ValidationError } from '.';\nimport { Text } from '../types';\nimport { ObjectAssertion } from './assert';\nimport type { Path } from './path';\n\nexport function assertText(text: Text, path: Path): ValidationError[] {\n const $ = new ObjectAssertion(text, path);\n\n if (!$.object()) {\n return $.errors;\n }\n\n $.noAdditionalProperties(['nodeType', 'data', 'value', 'marks']);\n\n $.object('data');\n $.each('marks', (mark, path) => {\n const mark$ = new ObjectAssertion(mark, path);\n\n if (!mark$.object()) {\n return mark$.errors;\n }\n\n // For historical reasons, we don't explicitly check for supported marks\n // e.g. bold, italic ..etc. This makes it possible for a customer to add\n // custom marks\n mark$.string('type');\n\n return mark$.errors;\n });\n\n $.string('value');\n\n return $.errors;\n}\n", "import { BLOCKS } from '../blocks';\nimport { INLINES } from '../inlines';\nimport { CONTAINERS, LIST_ITEM_BLOCKS, TOP_LEVEL_BLOCKS } from '../schemaConstraints';\nimport { Document, Text } from '../types';\nimport { ObjectAssertion } from './assert';\nimport { NodeAssertion, Node, HyperLinkAssertion, assert, assertLink, VOID_CONTENT } from './node';\nimport { Path } from './path';\nimport { assertText } from './text';\n\nexport type ValidationError = {\n name: string;\n type?: string;\n value?: Record | string | number | boolean | null;\n min?: number | string;\n max?: number | string;\n details?: string | null;\n path?: (string | number)[];\n contentTypeId?: string | string[];\n nodeType?: string;\n customMessage?: string;\n expected?: string[];\n};\n\nconst assertInlineOrText = assert([...Object.values(INLINES), 'text'].sort());\n\nconst assertList = assert([BLOCKS.LIST_ITEM]);\nconst assertVoidEntryLink = assertLink('Entry', VOID_CONTENT);\nconst assertTableCell = assert(\n () => ({\n nodeTypes: [BLOCKS.PARAGRAPH],\n min: 1,\n }),\n (data, path) => {\n const $ = new ObjectAssertion(data, path);\n\n $.noAdditionalProperties(['colspan', 'rowspan']);\n $.number('colspan', true);\n $.number('rowspan', true);\n\n return $.errors;\n },\n);\n\nconst nodeValidator: Record> = {\n [BLOCKS.DOCUMENT]: assert(TOP_LEVEL_BLOCKS),\n [BLOCKS.PARAGRAPH]: assertInlineOrText,\n [BLOCKS.HEADING_1]: assertInlineOrText,\n [BLOCKS.HEADING_2]: assertInlineOrText,\n [BLOCKS.HEADING_3]: assertInlineOrText,\n [BLOCKS.HEADING_4]: assertInlineOrText,\n [BLOCKS.HEADING_5]: assertInlineOrText,\n [BLOCKS.HEADING_6]: assertInlineOrText,\n [BLOCKS.QUOTE]: assert(CONTAINERS[BLOCKS.QUOTE]),\n [BLOCKS.EMBEDDED_ENTRY]: assertVoidEntryLink,\n [BLOCKS.EMBEDDED_ASSET]: assertLink('Asset', VOID_CONTENT),\n [BLOCKS.EMBEDDED_RESOURCE]: assertLink('Contentful:Entry', VOID_CONTENT),\n [BLOCKS.HR]: assert(VOID_CONTENT),\n [BLOCKS.OL_LIST]: assertList,\n [BLOCKS.UL_LIST]: assertList,\n [BLOCKS.LIST_ITEM]: assert([...LIST_ITEM_BLOCKS].sort()),\n [BLOCKS.TABLE]: assert(() => ({\n nodeTypes: [BLOCKS.TABLE_ROW],\n min: 1,\n })),\n [BLOCKS.TABLE_ROW]: assert(() => ({\n nodeTypes: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],\n min: 1,\n })),\n [BLOCKS.TABLE_CELL]: assertTableCell,\n [BLOCKS.TABLE_HEADER_CELL]: assertTableCell,\n [INLINES.HYPERLINK]: new HyperLinkAssertion(),\n [INLINES.EMBEDDED_ENTRY]: assertVoidEntryLink,\n [INLINES.EMBEDDED_RESOURCE]: assertLink('Contentful:Entry', VOID_CONTENT),\n [INLINES.ENTRY_HYPERLINK]: assertLink('Entry', ['text']),\n [INLINES.ASSET_HYPERLINK]: assertLink('Asset', ['text']),\n [INLINES.RESOURCE_HYPERLINK]: assertLink('Contentful:Entry', ['text']),\n};\n\nfunction validateNode(node: Node | Text, path: Path): ValidationError[] {\n if (node.nodeType === 'text') {\n return assertText(node, path);\n }\n\n const errors = nodeValidator[node.nodeType].assert(node, path);\n\n if (errors.length > 0) {\n return errors;\n }\n\n const $ = new ObjectAssertion(node, path);\n\n $.each('content', (item, path) => {\n // We already know those are valid nodes thanks to the assertion done in\n // the NodeAssertion class\n return validateNode(item, path);\n });\n\n return $.errors;\n}\n\nexport const validateRichTextDocument = (document: Document): ValidationError[] => {\n const path = new Path();\n const $ = new ObjectAssertion(document, path);\n\n if ($.object()) {\n $.enum('nodeType', [BLOCKS.DOCUMENT]);\n }\n\n if ($.errors.length > 0) {\n return $.errors;\n }\n\n return validateNode(document, path);\n};\n", "import { cloneElement, isValidElement, ReactNode } from 'react';\n\nexport function appendKeyToValidElement(element: ReactNode, key: number): ReactNode {\n if (isValidElement(element) && element.key === null) {\n return cloneElement(element, { key });\n }\n return element;\n}\n", "import React, { ReactNode } from 'react';\n\nimport { helpers, Mark } from '@contentful/rich-text-types';\n\nimport { CommonNode, Options } from '..';\n\nimport { appendKeyToValidElement } from './appendKeyToValidElement';\n\nexport function nodeListToReactComponents(nodes: CommonNode[], options: Options): ReactNode {\n return nodes.map((node: CommonNode, index: number): ReactNode => {\n return appendKeyToValidElement(nodeToReactComponent(node, options), index);\n });\n}\n\nexport function nodeToReactComponent(node: CommonNode, options: Options): ReactNode {\n const { renderNode, renderMark, renderText, preserveWhitespace } = options;\n\n if (helpers.isText(node)) {\n let nodeValue: ReactNode = renderText ? renderText(node.value) : node.value;\n\n // Preserving whitespace is only supported with the default transformations.\n if (preserveWhitespace && !renderText) {\n // Preserve multiple spaces.\n nodeValue = (nodeValue as string).replace(/ {2,}/g, (match) => '\\u00A0'.repeat(match.length));\n\n // Preserve line breaks.\n const lines = (nodeValue as string).split('\\n');\n const jsxLines: (string | React.JSX.Element)[] = [];\n\n lines.forEach((line, index) => {\n jsxLines.push(line);\n if (index !== lines.length - 1) {\n jsxLines.push(
);\n }\n });\n nodeValue = jsxLines;\n }\n\n return node.marks.reduce((value: ReactNode, mark: Mark): ReactNode => {\n if (!renderMark[mark.type]) {\n return value;\n }\n return renderMark[mark.type](value);\n }, nodeValue);\n } else {\n const children: ReactNode = nodeListToReactComponents(node.content, options);\n if (!node.nodeType || !renderNode[node.nodeType]) {\n return <>{children};\n }\n return renderNode[node.nodeType](node, children);\n }\n}\n", "import React, { ReactNode } from 'react';\n\nimport { Block, BLOCKS, Document, Inline, INLINES, MARKS, Text } from '@contentful/rich-text-types';\n\nimport { nodeToReactComponent } from './util/nodeListToReactComponents';\n\nconst defaultNodeRenderers: RenderNode = {\n [BLOCKS.DOCUMENT]: (node, children) => children,\n [BLOCKS.PARAGRAPH]: (node, children) =>

{children}

,\n [BLOCKS.HEADING_1]: (node, children) =>

{children}

,\n [BLOCKS.HEADING_2]: (node, children) =>

{children}

,\n [BLOCKS.HEADING_3]: (node, children) =>

{children}

,\n [BLOCKS.HEADING_4]: (node, children) =>

{children}

,\n [BLOCKS.HEADING_5]: (node, children) =>
{children}
,\n [BLOCKS.HEADING_6]: (node, children) =>
{children}
,\n [BLOCKS.EMBEDDED_ENTRY]: (node, children) =>
{children}
,\n [BLOCKS.EMBEDDED_RESOURCE]: (node, children) =>
{children}
,\n [BLOCKS.UL_LIST]: (node, children) =>
    {children}
,\n [BLOCKS.OL_LIST]: (node, children) =>
    {children}
,\n [BLOCKS.LIST_ITEM]: (node, children) =>
  • {children}
  • ,\n [BLOCKS.QUOTE]: (node, children) =>
    {children}
    ,\n [BLOCKS.HR]: () =>
    ,\n [BLOCKS.TABLE]: (node, children) => (\n \n {children}\n
    \n ),\n [BLOCKS.TABLE_ROW]: (node, children) => {children},\n [BLOCKS.TABLE_HEADER_CELL]: (node, children) => {children},\n [BLOCKS.TABLE_CELL]: (node, children) => {children},\n [INLINES.ASSET_HYPERLINK]: (node) => defaultInline(INLINES.ASSET_HYPERLINK, node as Inline),\n [INLINES.ENTRY_HYPERLINK]: (node) => defaultInline(INLINES.ENTRY_HYPERLINK, node as Inline),\n [INLINES.RESOURCE_HYPERLINK]: (node) =>\n defaultInlineResource(INLINES.RESOURCE_HYPERLINK, node as Inline),\n [INLINES.EMBEDDED_ENTRY]: (node) => defaultInline(INLINES.EMBEDDED_ENTRY, node as Inline),\n [INLINES.EMBEDDED_RESOURCE]: (node, _children) =>\n defaultInlineResource(INLINES.EMBEDDED_RESOURCE, node as Inline),\n [INLINES.HYPERLINK]: (node, children) => {children},\n};\n\nconst defaultMarkRenderers: RenderMark = {\n [MARKS.BOLD]: (text) => {text},\n [MARKS.ITALIC]: (text) => {text},\n [MARKS.UNDERLINE]: (text) => {text},\n [MARKS.CODE]: (text) => {text},\n [MARKS.SUPERSCRIPT]: (text) => {text},\n [MARKS.SUBSCRIPT]: (text) => {text},\n [MARKS.STRIKETHROUGH]: (text) => {text},\n};\n\nfunction defaultInline(type: string, node: Inline): ReactNode {\n return (\n \n type: {node.nodeType} id: {node.data.target.sys.id}\n \n );\n}\n\nfunction defaultInlineResource(type: string, node: Inline) {\n return (\n \n type: {node.nodeType} urn: {node.data.target.sys.urn}\n \n );\n}\n\nexport type CommonNode = Text | Block | Inline;\n\nexport interface NodeRenderer {\n (node: Block | Inline, children: ReactNode): ReactNode;\n}\n\nexport interface RenderNode {\n [k: string]: NodeRenderer;\n}\n\nexport interface RenderMark {\n [k: string]: (text: ReactNode) => ReactNode;\n}\n\nexport interface RenderText {\n (text: string): ReactNode;\n}\n\nexport interface Options {\n /**\n * Node renderers\n */\n renderNode?: RenderNode;\n /**\n * Mark renderers\n */\n renderMark?: RenderMark;\n /**\n * Text renderer\n */\n renderText?: RenderText;\n /**\n * Keep line breaks and multiple spaces\n */\n preserveWhitespace?: boolean;\n}\n\n/**\n * Serialize a Contentful Rich Text `document` to React tree\n */\nexport function documentToReactComponents(\n richTextDocument: Document,\n options: Options = {},\n): ReactNode {\n if (!richTextDocument) {\n return null;\n }\n\n return nodeToReactComponent(richTextDocument, {\n renderNode: {\n ...defaultNodeRenderers,\n ...options.renderNode,\n },\n renderMark: {\n ...defaultMarkRenderers,\n ...options.renderMark,\n },\n renderText: options.renderText,\n preserveWhitespace: options.preserveWhitespace,\n });\n}\n", "/**\n * Map of all Contentful block types. Blocks contain inline or block nodes.\n */\nexport enum BLOCKS {\n DOCUMENT = 'document',\n PARAGRAPH = 'paragraph',\n\n HEADING_1 = 'heading-1',\n HEADING_2 = 'heading-2',\n HEADING_3 = 'heading-3',\n HEADING_4 = 'heading-4',\n HEADING_5 = 'heading-5',\n HEADING_6 = 'heading-6',\n\n OL_LIST = 'ordered-list',\n UL_LIST = 'unordered-list',\n LIST_ITEM = 'list-item',\n\n HR = 'hr',\n QUOTE = 'blockquote',\n\n EMBEDDED_ENTRY = 'embedded-entry-block',\n EMBEDDED_ASSET = 'embedded-asset-block',\n EMBEDDED_RESOURCE = 'embedded-resource-block',\n\n TABLE = 'table',\n TABLE_ROW = 'table-row',\n TABLE_CELL = 'table-cell',\n TABLE_HEADER_CELL = 'table-header-cell',\n}\n", "/**\n * Map of all Contentful inline types. Inline contain inline or text nodes.\n *\n * @note This should be kept in alphabetical order since the\n * [validation package](https://github.com/contentful/content-stack/tree/master/packages/validation)\n * relies on the values being in a predictable order.\n */\nexport enum INLINES {\n ASSET_HYPERLINK = 'asset-hyperlink',\n EMBEDDED_ENTRY = 'embedded-entry-inline',\n EMBEDDED_RESOURCE = 'embedded-resource-inline',\n ENTRY_HYPERLINK = 'entry-hyperlink',\n HYPERLINK = 'hyperlink',\n RESOURCE_HYPERLINK = 'resource-hyperlink',\n}\n", "/**\n * Map of all Contentful marks.\n */\nexport enum MARKS {\n BOLD = 'bold',\n ITALIC = 'italic',\n UNDERLINE = 'underline',\n CODE = 'code',\n SUPERSCRIPT = 'superscript',\n SUBSCRIPT = 'subscript',\n STRIKETHROUGH = 'strikethrough',\n}\n", "import { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\nimport { MARKS } from './marks';\n\nexport type TopLevelBlockEnum =\n | BLOCKS.PARAGRAPH\n | BLOCKS.HEADING_1\n | BLOCKS.HEADING_2\n | BLOCKS.HEADING_3\n | BLOCKS.HEADING_4\n | BLOCKS.HEADING_5\n | BLOCKS.HEADING_6\n | BLOCKS.OL_LIST\n | BLOCKS.UL_LIST\n | BLOCKS.HR\n | BLOCKS.QUOTE\n | BLOCKS.EMBEDDED_ENTRY\n | BLOCKS.EMBEDDED_ASSET\n | BLOCKS.EMBEDDED_RESOURCE\n | BLOCKS.TABLE;\n\n/**\n * Array of all top level block types.\n * Only these block types can be the direct children of the document.\n */\nexport const TOP_LEVEL_BLOCKS: TopLevelBlockEnum[] = [\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n BLOCKS.TABLE,\n];\n\nexport type ListItemBlockEnum =\n | BLOCKS.PARAGRAPH\n | BLOCKS.HEADING_1\n | BLOCKS.HEADING_2\n | BLOCKS.HEADING_3\n | BLOCKS.HEADING_4\n | BLOCKS.HEADING_5\n | BLOCKS.HEADING_6\n | BLOCKS.OL_LIST\n | BLOCKS.UL_LIST\n | BLOCKS.HR\n | BLOCKS.QUOTE\n | BLOCKS.EMBEDDED_ENTRY\n | BLOCKS.EMBEDDED_ASSET\n | BLOCKS.EMBEDDED_RESOURCE;\n\n/**\n * Array of all allowed block types inside list items\n */\nexport const LIST_ITEM_BLOCKS: TopLevelBlockEnum[] = [\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n];\n\nexport const TABLE_BLOCKS = [\n BLOCKS.TABLE,\n BLOCKS.TABLE_ROW,\n BLOCKS.TABLE_CELL,\n BLOCKS.TABLE_HEADER_CELL,\n];\n\n/**\n * Array of all void block types\n */\nexport const VOID_BLOCKS = [\n BLOCKS.HR,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n BLOCKS.EMBEDDED_RESOURCE,\n];\n\n/**\n * Dictionary of all container block types, and the set block types they accept as children.\n *\n * Note: This does not include `[BLOCKS.DOCUMENT]: TOP_LEVEL_BLOCKS`\n */\nexport const CONTAINERS = {\n [BLOCKS.OL_LIST]: [BLOCKS.LIST_ITEM],\n [BLOCKS.UL_LIST]: [BLOCKS.LIST_ITEM],\n [BLOCKS.LIST_ITEM]: LIST_ITEM_BLOCKS,\n [BLOCKS.QUOTE]: [BLOCKS.PARAGRAPH],\n [BLOCKS.TABLE]: [BLOCKS.TABLE_ROW],\n [BLOCKS.TABLE_ROW]: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],\n [BLOCKS.TABLE_CELL]: [BLOCKS.PARAGRAPH, BLOCKS.UL_LIST, BLOCKS.OL_LIST],\n [BLOCKS.TABLE_HEADER_CELL]: [BLOCKS.PARAGRAPH],\n};\n\n/**\n * Array of all heading levels\n */\nexport const HEADINGS = [\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n];\n\n/**\n * Array of all block types that may contain text and inline nodes.\n */\nexport const TEXT_CONTAINERS = [BLOCKS.PARAGRAPH, ...HEADINGS];\n\n/**\n * Node types before `tables` release.\n */\nexport const V1_NODE_TYPES = [\n BLOCKS.DOCUMENT,\n BLOCKS.PARAGRAPH,\n BLOCKS.HEADING_1,\n BLOCKS.HEADING_2,\n BLOCKS.HEADING_3,\n BLOCKS.HEADING_4,\n BLOCKS.HEADING_5,\n BLOCKS.HEADING_6,\n BLOCKS.OL_LIST,\n BLOCKS.UL_LIST,\n BLOCKS.LIST_ITEM,\n BLOCKS.HR,\n BLOCKS.QUOTE,\n BLOCKS.EMBEDDED_ENTRY,\n BLOCKS.EMBEDDED_ASSET,\n INLINES.HYPERLINK,\n INLINES.ENTRY_HYPERLINK,\n INLINES.ASSET_HYPERLINK,\n INLINES.EMBEDDED_ENTRY,\n 'text',\n];\n\n/**\n * Marks before `superscript` & `subscript` release.\n */\nexport const V1_MARKS = [MARKS.BOLD, MARKS.CODE, MARKS.ITALIC, MARKS.UNDERLINE];\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=nodeTypes.js.map", "import { BLOCKS } from './blocks';\nimport { Document } from './types';\n\n/**\n * A rich text document considered to be empty.\n * Any other document structure than this is not considered empty.\n */\nexport const EMPTY_DOCUMENT: Document = {\n nodeType: BLOCKS.DOCUMENT,\n data: {},\n content: [\n {\n nodeType: BLOCKS.PARAGRAPH,\n data: {},\n content: [\n {\n nodeType: 'text',\n value: '',\n marks: [],\n data: {},\n },\n ],\n },\n ],\n};\n", "import { BLOCKS } from './blocks';\nimport { INLINES } from './inlines';\nimport { Block, Inline, Node, Text } from './types';\n\n/**\n * Tiny replacement for Object.values(object).includes(key) to\n * avoid including CoreJS polyfills\n */\nfunction hasValue(obj: Record, value: unknown) {\n for (const key of Object.keys(obj)) {\n if (value === obj[key]) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Checks if the node is an instance of Inline.\n */\nexport function isInline(node: Node): node is Inline {\n return hasValue(INLINES, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Block.\n */\nexport function isBlock(node: Node): node is Block {\n return hasValue(BLOCKS, node.nodeType);\n}\n\n/**\n * Checks if the node is an instance of Text.\n */\nexport function isText(node: Node): node is Text {\n return node.nodeType === 'text';\n}\n", "export declare type PrimitiveType = number | boolean | string | null;\nexport declare type Definition = {\n $ref?: string;\n $schema?: string;\n $id?: string;\n description?: string;\n allOf?: Definition[];\n oneOf?: Definition[];\n anyOf?: Definition[];\n title?: string;\n type?: string | string[];\n definitions?: {\n [key: string]: any;\n };\n format?: string;\n items?: Definition | Definition[];\n minItems?: number;\n additionalItems?:\n | {\n anyOf: Definition[];\n }\n | Definition;\n enum?: PrimitiveType[] | Definition[];\n default?: PrimitiveType | Record;\n additionalProperties?: Definition | boolean;\n required?: string[];\n propertyOrder?: string[];\n properties?: {\n [key: string]: any;\n };\n defaultProperties?: string[];\n patternProperties?: {\n [pattern: string]: Definition;\n };\n typeof?: 'function';\n};\n\nexport function getSchemaWithNodeType(nodeType: string): Definition {\n try {\n return require(`./generated/${nodeType}.json`);\n } catch (error) {\n throw new Error(`Schema for nodeType \"${nodeType}\" was not found.`);\n }\n}\n", "export { BLOCKS } from './blocks';\nexport { INLINES } from './inlines';\nexport { MARKS } from './marks';\n\nexport * from './schemaConstraints';\n\nexport * from './types';\nexport * from './nodeTypes';\n\nexport { EMPTY_DOCUMENT } from './emptyDocument';\n\nimport * as helpers from './helpers';\nexport { helpers };\n\nexport { getSchemaWithNodeType } from './schemas';\n", "\n import \"_sentry-debug-id-injection-stub\";\n import * as OriginalModule from \"./internal/esbuild/entrypoints/modern/classic/discover.ts\";\n export default OriginalModule.default;\n export * from \"./internal/esbuild/entrypoints/modern/classic/discover.ts\";", ";{try{let e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\"cac9270b-7d62-498e-994a-926a180ee295\",e._sentryDebugIdIdentifier=\"sentry-dbid-cac9270b-7d62-498e-994a-926a180ee295\")}catch(e){}};", "import '@owl-nest/polyfill'\nimport '../../../../../src/ulule/static/site/src/modern/features/init/index.js'\nimport '../../../../../src/ulule/static/site/src/modern/features/discover/index.js'\n", "import * as React from 'react'\nimport * as ReactDOM from 'react-dom/client'\nimport { styled } from 'next-yak'\n\nimport * as env from '@owl-nest/config'\nimport * as logger from '@owl-nest/logger'\nimport * as services from '@owl-nest/services'\n\nimport SausageMenu from '$components/Menu/Sausage'\n\nimport { processData } from './utils/data'\nimport { usePartnersOperation } from './hooks/usePartnersOperation'\nimport * as UFE from './UFE'\nimport { Partners } from './components/Partners'\nimport SearchSection from './views/SearchSection'\n\nfunction renderApp() {\n logger.setTag('feature', 'discover')\n\n const language = env.getUserLocale()\n\n if (process.env.NODE_ENV !== 'production') {\n console.log(`React is renderering app for language=${language}`)\n }\n\n // Process JSON data before give it to React app\n const data = processData(UFE.DISCOVER_DATA)\n\n // Render app\n const container = document.getElementById('react-app-root')\n const root = ReactDOM.createRoot(container as HTMLElement)\n root.render()\n}\n\n// Initialize application\nwindow.addEventListener('js:location:loaded', async () => {\n renderApp()\n})\n\nfunction App({ data }: { data: any }) {\n const auth = services.user.useAuth()\n\n const { partnersOperations } = usePartnersOperation()\n\n const onGoingPartnersOperations =\n partnersOperations.filter(\n (predicate) => predicate.status === services.partnersOperation.PartnerOperationStatus.ONGOING,\n ) ?? ([] as services.partnersOperation.OngoingPartnersOperation[])\n\n // HACK: double spinner here (with the one in the template /frontend/src/ulule/templates/ulule/presale/index/discover.html#L34-L35)\n // because we need to initialize the auth to know whether the user is logged in or not\n // to get the correct extra fields on the initial render of SearchSection\n if (auth.type === 'initial') {\n return (\n \n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n\n return (\n <>\n \n\n
    \n \n
    \n\n {onGoingPartnersOperations.length > 0 && }\n \n )\n}\n\nconst Wrapper = styled.div`\n justify-content: center;\n align-items: center;\n display: flex;\n height: 50vh;\n`\n", "import React from 'react'\nimport MediaQuery from 'react-responsive'\nimport { styled } from 'next-yak'\n\nimport { SausageItem } from './item'\nimport { SausageList } from './list'\n\nconst SausageWrapper = styled.div`\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n height: 75px;\n border-top: 1px solid #e0e0e0;\n border-bottom: 1px solid #e0e0e0;\n align-items: center;\n display: flex;\n padding: 0;\n background-color: #faf8f5;\n\n @media (max-width: 768px) {\n width: 100%;\n overflow-x: scroll;\n }\n`\n\nclass Sausage extends React.Component {\n wrapperRef = React.createRef()\n\n constructor(props) {\n super(props)\n\n this.state = {\n hover: false,\n }\n }\n\n componentDidMount() {\n const body = this.wrapperRef.current\n const list = body.firstChild\n const listSize = list.getBoundingClientRect()\n this.setState({\n width: listSize.width,\n })\n }\n\n handleHover = (hoverState) => {\n this.setState({\n hover: hoverState,\n })\n }\n\n render() {\n const { items } = this.props\n const { width, hover } = this.state\n return (\n this.handleHover(false)}\n onMouseOver={() => this.handleHover(true)}\n ref={this.wrapperRef}\n width={width}\n >\n \n {items &&\n items.length &&\n items.map((element, key) => {\n return \n })}\n \n \n \n {items &&\n items.length &&\n items.map((element, key) => {\n return \n })}\n \n \n \n )\n }\n}\n\nexport default Sausage\n", "import React from 'react'\nimport { styled } from 'next-yak'\n\nimport { RegularText, COLORS } from '@ulule/owl-kit-components'\n\nconst SausageItemWrapper = styled.li`\n margin-left: 17px;\n margin-right: 17px;\n`\n\nconst SausageItemText = styled(RegularText)`\n font-size: 13px;\n font-weight: bold;\n color: ${COLORS.PRIMARY_BLUE_500};\n text-transform: uppercase;\n\n &:hover {\n color: ${COLORS.TEXT_LINK_HOVER};\n }\n`\n\nexport const SausageItem = ({ element }) => (\n \n \n {element && element.name}\n \n \n)\n", "import React from 'react'\nimport { styled, keyframes } from 'next-yak'\nimport { withPrivatePublicMap } from '@owl-nest/yak/extra-runtime'\n\nconst anim = keyframes`\n from {\n transform: translateX(0%);\n }\n to {\n transform: translateX(-100%);\n }\n`\n\nconst PrivateSausageList = styled.ul`\n list-style: none;\n display: inline-flex;\n animation: ${anim} 140s linear infinite;\n animation-play-state: ${(props) => (props.$isHover ? 'paused' : 'running')};\n padding: 0;\n @media (max-width: 768px) {\n animation-play-state: paused;\n }\n`\n\nexport const SausageList = withPrivatePublicMap(\n PrivateSausageList,\n ({ isHover, ...props }) => ({\n ...props,\n $isHover: isHover,\n }),\n true,\n)\n", "export function processData(json: any) {\n // TODO: Temporarily hide filters cities and regions for all countries (until it works)\n const processedJson = { ...json, filters: json.filters.filter((f) => f.name !== 'regions' && f.name !== 'cities') }\n\n return processedJson\n}\n", "import * as React from 'react'\n\nimport * as services from '@owl-nest/services'\nimport * as contentful from '@owl-nest/contentful'\nimport { rawRequester, GraphQLClient } from '@owl-nest/graphql'\nimport * as env from '@owl-nest/config'\nimport * as api from '@owl-nest/api-client/latest'\n\nexport function usePartnersOperation() {\n const language = env.getUserLocale()\n const locale = language === 'fr' || language === 'en' ? api.LOCALES[language] : 'fr-FR'\n\n const request = React.useMemo(() => {\n const environnement = env.CONTENTFUL_ENVIRONMENT ?? 'master'\n const space = env.CONTENTFUL_SPACE_ID\n const accessToken = env.CONTENTFUL_DELIVERY_TOKEN_MASTER\n\n const client = rawRequester(\n new GraphQLClient(\n `https://graphql.contentful.com/content/v1/spaces/${space}/environments/${environnement}?access_token=${accessToken}`,\n ),\n )\n\n return contentful.requester(client)\n }, [])\n\n const { response } = services.partnersOperation.usePartnersOperationCollection({\n params: { locale: locale },\n request,\n })\n\n const partnersOperations = response.data?.partnersOperationCollection?.items ?? []\n\n return {\n partnersOperations,\n }\n}\n", "import * as env from '@owl-nest/config'\n\ntype Illustration = {\n x1: string\n x2: string\n x3: string\n}\n\ntype Window = {\n UFE: {\n urls: { [any: string]: string }\n assets: {\n modalRemindMe: Illustration\n }\n }\n DISCOVER_DATA: {\n categories: {\n absolute_url: string\n id: number\n name: string\n slug: string\n }[]\n filters: {\n label: string\n name: string\n options: {\n id?: number\n label: string\n value: string\n }[]\n position: number\n }[]\n partners: any[]\n sorting: {\n label: string\n value: string\n }[]\n tags: {\n absolute_url: string\n id: number\n slug: string\n name: string\n }[]\n }\n DISCOVER_ASSETS: {\n noResults: Illustration\n }\n}\n\nconst windowLens = env.lens()\n\nexport const DEFAULT_ASSETS = windowLens.get('UFE').get('assets').value(window)\nexport const ASSETS = windowLens.get('DISCOVER_ASSETS').value(window)\nexport const DISCOVER_DATA = windowLens.get('DISCOVER_DATA').value(window)\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { RichText } from '@owl-nest/rich-text'\n\nimport { t, tc } from '@owl-nest/localize'\nimport * as services from '@owl-nest/services'\nimport * as shadow from '@owl-nest/shadow'\nimport * as plume from '@ulule/owl-kit-components/next'\n\ntype PartnersProps = {\n partners: services.partnersOperation.OngoingPartnersOperation[]\n}\n\nexport function Partners({ partners }: PartnersProps): React.ReactElement {\n if (partners.length === 0) {\n return <>\n }\n\n return (\n \n \n \n {tc('[highlight: Partners] for your creative projects', {\n highlight: ,\n })}\n \n \n\n \n \n {partners.map((partnerOperation, index) => {\n return \n })}\n \n \n {t('See all calls for proposals')}\n \n )\n}\n\nfunction PartnerOperationCardWithTracking({\n partnerOperation,\n}: {\n partnerOperation: services.partnersOperation.OngoingPartnersOperation\n}): React.ReactElement {\n const partnerOperationRef = React.useRef(null)\n\n shadow.usePartnershipTracker(partnerOperation.partnerUserId ?? undefined, partnerOperationRef, {\n click: {\n enabled: false,\n },\n eventPosition: `homepage-partner-${partnerOperation.partnerUserId}`,\n ignoreLocationChange: true,\n impression: {\n enabled: true,\n once: true,\n },\n })\n\n return (\n
  • \n \n ) : null,\n keyTitle: 'À la clé',\n keyList: partnerOperation.keyList ? (\n \n ) : null,\n buttonMore: 'En savoir plus',\n link: 'Voir les projets participants',\n }}\n pictureUrl={partnerOperation.cover?.url}\n pictureSrcSet={`${partnerOperation.cover?.url} 1x, ${partnerOperation.cover?.url_2x} 2x, ${partnerOperation.cover?.url_3x} 3x`}\n isOngoing={partnerOperation.status === services.partnersOperation.PartnerOperationStatus.ONGOING}\n buttonUrl={partnerOperation.urlMore}\n linkUrl={partnerOperation.urlProjectList ?? undefined}\n />\n
  • \n )\n}\n\nconst CenteredCTA = styled(plume.ButtonAsLink)`\n display: block;\n margin: 40px auto 0;\n text-align: center;\n width: fit-content;\n`\n\nconst List = styled.ul`\n list-style: none;\n padding: 0 16px;\n white-space: nowrap;\n\n ${plume.PartnerOperationCard} {\n height: 100%;\n height: -webkit-fill-available;\n min-height: 250px;\n width: 100%;\n max-width: 70vw;\n\n @media screen and ${plume.BREAKPOINTS.MOBILE_L} {\n max-width: 60vw;\n }\n }\n\n ${plume.SlidingCarousel} {\n gap: 8px;\n }\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n ${plume.SlidingCarousel} {\n display: grid;\n gap: 20px;\n grid-template-columns: repeat(6, 320px);\n padding: 0;\n width: 100%;\n }\n\n ${plume.PartnerOperationCard} {\n min-height: 250px;\n }\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n ${plume.SlidingCarousel} {\n grid-template-rows: auto auto;\n gap: 33px;\n }\n }\n`\n\nconst Wrapper = styled.div`\n box-sizing: border-box;\n margin-bottom: 40px;\n margin: 0 12px;\n max-width: 1080px;\n padding-bottom: 1.5384615385rem;\n padding-top: 3.0769230769rem;\n overflow: hidden;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n overflow: visible;\n }\n\n @media screen and ${plume.BREAKPOINTS.LAPTOP} {\n margin: 0 auto;\n }\n`\n\nconst TitleGroup = styled.header`\n margin: 0 16px 36px;\n max-width: 1330px;\n width: 89%;\n\n @media screen and ${plume.BREAKPOINTS.TABLET} {\n margin: 0 16px 36px;\n }\n`\n\nconst SectionTitle = styled(plume.styles.heading.L).attrs({ asDesktop: 'XL' })``\n", "import * as React from 'react'\nimport {\n documentToReactComponents,\n type RenderMark,\n type RenderNode,\n type Options,\n} from '@contentful/rich-text-react-renderer'\nimport * as richtext from '@contentful/rich-text-types'\n\nimport * as contentful from '@owl-nest/contentful'\n\nexport type RichTextProps = {\n document: richtext.Document\n links?: {\n assets?: {\n block: contentful.Asset[]\n }\n entries?: {\n block: ENTRY[]\n }\n }\n renderEntry?: (entry: ENTRY) => React.ReactNode\n renderMark?: {\n Bold?: React.ComponentType<{ children: React.ReactNode }>\n Italic?: React.ComponentType<{ children: React.ReactNode }>\n Underline?: React.ComponentType<{ children: React.ReactNode }>\n }\n renderNode?: {\n Paragraph?: React.ComponentType<{ children: React.ReactNode }>\n Title1?: React.ComponentType<{ children: React.ReactNode }>\n Title2?: React.ComponentType<{ children: React.ReactNode }>\n Title3?: React.ComponentType<{ children: React.ReactNode }>\n Title4?: React.ComponentType<{ children: React.ReactNode }>\n Title5?: React.ComponentType<{ children: React.ReactNode }>\n Title6?: React.ComponentType<{ children: React.ReactNode }>\n UnorderedList?: React.ComponentType<{ children: React.ReactNode }>\n OrderedList?: React.ComponentType<{ children: React.ReactNode }>\n ListItem?: React.ComponentType<{ children: React.ReactNode }>\n BlockQuote?: React.ComponentType<{ children: React.ReactNode }>\n Table?: React.ComponentType<{ children: React.ReactNode }>\n TableCell?: React.ComponentType<{ children: React.ReactNode }>\n TableHeaderCell?: React.ComponentType<{ children: React.ReactNode }>\n TableRow?: React.ComponentType<{ children: React.ReactNode }>\n Hyperlink?: (props: { uri: string; children: React.ReactNode }) => React.ReactElement\n EmbeddedAsset?: (props: { asset: contentful.Asset }) => React.ReactElement\n }\n}\n\nexport function RichText({\n document,\n links,\n renderEntry,\n renderMark,\n renderNode,\n}: RichTextProps): React.ReactElement> {\n const blockAssetMap = new Map()\n const blockEntryMap = new Map()\n\n for (const asset of links?.assets?.block || []) {\n blockAssetMap.set(asset.sys.id, asset)\n }\n for (const entry of links?.entries?.block || []) {\n blockEntryMap.set(entry.sys.id, entry)\n }\n\n const richTextOptions = React.useMemo(\n () => ({\n renderMark: {\n [richtext.MARKS.BOLD]: makeRenderMark(renderMark?.Bold),\n [richtext.MARKS.ITALIC]: makeRenderMark(renderMark?.Italic),\n [richtext.MARKS.UNDERLINE]: makeRenderMark(renderMark?.Underline),\n },\n renderNode: {\n [richtext.BLOCKS.PARAGRAPH]: makeRenderNode(renderNode?.Paragraph),\n [richtext.BLOCKS.HEADING_1]: makeRenderNode(renderNode?.Title1),\n [richtext.BLOCKS.HEADING_2]: makeRenderNode(renderNode?.Title2),\n [richtext.BLOCKS.HEADING_3]: makeRenderNode(renderNode?.Title3),\n [richtext.BLOCKS.HEADING_4]: makeRenderNode(renderNode?.Title4),\n [richtext.BLOCKS.HEADING_5]: makeRenderNode(renderNode?.Title5),\n [richtext.BLOCKS.HEADING_6]: makeRenderNode(renderNode?.Title6),\n [richtext.BLOCKS.UL_LIST]: makeRenderNode(renderNode?.UnorderedList),\n [richtext.BLOCKS.OL_LIST]: makeRenderNode(renderNode?.OrderedList),\n [richtext.BLOCKS.LIST_ITEM]: makeRenderNode(renderNode?.ListItem),\n [richtext.BLOCKS.QUOTE]: makeRenderNode(renderNode?.BlockQuote),\n [richtext.BLOCKS.TABLE]: makeRenderNode(renderNode?.Table),\n [richtext.BLOCKS.TABLE_CELL]: makeRenderNode(renderNode?.TableCell),\n [richtext.BLOCKS.TABLE_HEADER_CELL]: makeRenderNode(renderNode?.TableHeaderCell),\n [richtext.BLOCKS.TABLE_ROW]: makeRenderNode(renderNode?.TableRow),\n [richtext.INLINES.HYPERLINK]: (node, children) => {\n const Hyperlink = renderNode?.Hyperlink\n if (!Hyperlink) {\n return <>\n }\n return {children}\n },\n [richtext.BLOCKS.EMBEDDED_ASSET]: (node) => {\n const asset = blockAssetMap.get(node.data.target.sys.id)\n\n const EmbeddedAsset = renderNode?.EmbeddedAsset\n\n if (asset === undefined || EmbeddedAsset === undefined) {\n return <>\n }\n\n if (EmbeddedAsset) {\n return \n }\n },\n [richtext.BLOCKS.EMBEDDED_ENTRY]: (node) => {\n const entry = blockEntryMap.get(node.data.target.sys.id)\n if (entry === undefined || renderEntry === undefined) {\n return <>\n }\n return renderEntry(entry)\n },\n },\n }),\n [],\n )\n\n return <>{documentToReactComponents(document, richTextOptions)}\n}\n\nfunction makeRenderMark(Component?: React.ComponentType<{ children: React.ReactNode }>): RenderMark[string] {\n // eslint-disable-next-line react/display-name\n return (text) => {\n if (!Component) {\n return <>\n }\n return {text}\n }\n}\n\nfunction makeRenderNode(Component?: React.ComponentType<{ children: React.ReactNode }>): RenderNode[string] {\n // eslint-disable-next-line react/display-name\n return (node, children) => {\n if (!Component) {\n return <>\n }\n return {children}\n }\n}\n", "import * as React from 'react'\n\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\n\nimport { useSearch } from '../hooks/useSearch'\nimport { type Filter, type FilterOption } from '../utils/filters'\n\nimport SearchBar from '../components/searchbar'\nimport FiltersBar from '../components/filtersbar/index'\nimport NoResults from '../components/noresults'\nimport Results from '../components/results'\n\ntype SortingOption = {\n value: string\n label: string\n}\n\ntype FilterBarFilter = {\n label: string\n name: string\n options: Array<{ value: string; label: string }>\n}\n\ntype SearchSectionProps = {\n filters: Filter[]\n sorting: SortingOption[]\n modalImg: {\n '1x': string | undefined\n '2x': string | undefined\n '3x': string | undefined\n }\n tags?: FilterOption[]\n}\n\nfunction SearchSection({ filters, sorting, modalImg, tags }: SearchSectionProps): React.ReactElement {\n const currentLanguage = env.getUserLocale()\n\n const {\n state,\n updateFilter,\n updateSorting,\n handleSearchUpdate,\n onSearchReset,\n onSearchSubmit,\n handleLoadMore,\n handleLoadPrevious,\n handleCloseError,\n } = useSearch({\n filters,\n sorting,\n tags,\n currentLanguage,\n })\n\n return (\n <>\n handleSearchUpdate(value)}\n onSubmit={(event: React.FormEvent) => onSearchSubmit(event)}\n onReset={onSearchReset}\n />\n\n {state.error && (\n handleCloseError()} closable wrapWithCopy>\n {state.error.message}\n \n )}\n\n
    \n updateFilter(name as keyof typeof state.currentFilters, value)}\n />\n
    \n\n {!state.isFetching && state.meta.totalCount === 0 ? (\n \n ) : (\n 0}\n canLoadMore={state.meta.next !== null}\n isFetchingPrevious={state.isFetchingPrevious}\n errorFetchingPrevious={state.errorFetchingPrevious}\n handleLoadPrevious={handleLoadPrevious}\n isFetching={state.isFetching}\n isFetchingMore={state.isFetchingMore}\n errorFetchingMore={state.errorFetchingMore}\n resultsCount={state.meta.totalCount}\n sorting={sorting}\n currentSorting={state.currentSorting}\n updateSorting={updateSorting}\n handleLoadMore={handleLoadMore}\n results={state.results}\n modalImg={modalImg}\n />\n )}\n \n )\n}\n\nexport default SearchSection\n", "import * as React from 'react'\nimport { parse, stringify } from 'qs'\n\nimport * as api from '@owl-nest/api-client/next'\nimport * as services from '@owl-nest/services'\n\nimport { fetchSearchProjects, fetchSearchMoreProjects } from '../services'\nimport { getFilterByName, type FilterOption, type Filter } from '../utils/filters'\n\nconst SEARCH_API_FILTERS = {\n categories: {\n defaultValue: 'all',\n qualifier: 'tag_id',\n valueAttribute: 'id',\n },\n statuses: {\n defaultValue: 'all',\n qualifier: 'status',\n valueAttribute: 'value',\n },\n languages: {\n defaultValue: 'all',\n qualifier: 'lang',\n valueAttribute: 'value',\n },\n countries: {\n defaultValue: 'all',\n qualifier: 'country',\n valueAttribute: 'value',\n },\n regions: {\n defaultValue: 'all',\n qualifier: 'region_id',\n valueAttribute: 'id',\n },\n cities: {\n defaultValue: 'all',\n qualifier: 'city_id',\n valueAttribute: 'id',\n },\n}\n\nconst DEFAULT_SORTING = 'popular'\nconst DEFAULT_OFFSET = 0\nconst DEFAULT_LIMIT = 60\nconst DEFAULT_SORT_LIMIT = 16\n\ntype SortingOption = {\n value: string\n label: string\n}\n\ntype Meta = {\n offset: number\n start: number\n limit: number\n totalCount: number\n next: string | null\n previous: string | null\n}\n\ntype CurrentFilters = {\n categories: string[]\n countries: string[]\n regions: string[]\n cities: string[]\n statuses: string[]\n languages: string[]\n}\n\ntype ErrorState = {\n level: string\n message: string\n}\n\ntype SearchState = {\n currentFilters: CurrentFilters\n currentSearch: string\n currentSearchInput: string\n currentSorting: string\n error: ErrorState | null\n errorFetchingMore: boolean\n errorFetchingPrevious: boolean\n isFetching: boolean\n isFetchingMore: boolean\n isFetchingPrevious: boolean\n meta: Meta\n quantityFetched?: number\n results: api.Project[]\n savedResults: api.Project[] | null\n resetSearch: boolean\n}\n\ntype UseSearchProps = {\n currentLanguage?: string\n filters: Filter[]\n sorting: SortingOption[]\n tags?: FilterOption[]\n}\n\ntype UseSearchReturn = {\n state: SearchState\n updateFilter: (filterName: keyof CurrentFilters, optionValue: string) => void\n updateSorting: (value: string) => void\n handleSearchUpdate: (value: string) => void\n onSearchChange: (event: React.ChangeEvent) => void\n onSearchReset: () => void\n onSearchSubmit: (event: React.FormEvent) => void\n handleLoadMore: () => void\n handleLoadPrevious: () => void\n handleCloseError: () => void\n}\n\nexport function useSearch({\n filters,\n sorting: _sorting,\n tags,\n currentLanguage = 'fr',\n}: UseSearchProps): UseSearchReturn {\n const auth = services.user.useAuth()\n const isAuthenticated = auth.type === 'loggedin'\n\n const [state, setState] = React.useState(() => ({\n results: [],\n savedResults: null,\n meta: {\n offset: DEFAULT_OFFSET,\n start: DEFAULT_OFFSET,\n limit: DEFAULT_LIMIT,\n totalCount: 0,\n next: null,\n previous: null,\n },\n isFetching: true,\n isFetchingMore: false,\n isFetchingPrevious: false,\n error: null,\n errorFetchingMore: false,\n errorFetchingPrevious: false,\n currentFilters: {\n categories: ['all'],\n countries: ['all'],\n regions: ['all'],\n cities: ['all'],\n statuses: ['currently'],\n languages: ['all'],\n },\n currentSearch: '',\n currentSearchInput: '',\n currentSorting: DEFAULT_SORTING,\n resetSearch: false,\n ...getInitialStateFromUrl(),\n }))\n\n const memoizedResults = React.useMemo(() => state.results, [state.results])\n const memoizedMeta = React.useMemo(() => state.meta, [state.meta])\n const memoizedCurrentFilters = React.useMemo(() => state.currentFilters, [state.currentFilters])\n\n React.useEffect(() => {\n requestResults()\n }, [])\n\n React.useEffect(() => {\n if (state.currentFilters || state.currentSorting) {\n requestResults()\n }\n }, [state.currentFilters, state.currentSorting])\n\n React.useEffect(() => {\n if (state.resetSearch === true) {\n requestResults()\n setState((prevState) => ({ ...prevState, resetSearch: false }))\n }\n }, [state.resetSearch])\n\n return {\n state: {\n ...state,\n results: memoizedResults,\n meta: memoizedMeta,\n currentFilters: memoizedCurrentFilters,\n },\n updateFilter,\n updateSorting,\n handleSearchUpdate,\n onSearchChange,\n onSearchReset,\n onSearchSubmit,\n handleLoadMore,\n handleLoadPrevious,\n handleCloseError,\n }\n\n function parseQualifiers(): Record {\n const input: Record = {\n sort: state.currentSorting,\n }\n\n Object.keys(state.currentFilters).forEach((key) => {\n if (\n state.currentFilters[key as keyof CurrentFilters] &&\n state.currentFilters[key as keyof CurrentFilters].length > 0 &&\n SEARCH_API_FILTERS[key as keyof typeof SEARCH_API_FILTERS] &&\n state.currentFilters[key as keyof CurrentFilters][0] !==\n SEARCH_API_FILTERS[key as keyof typeof SEARCH_API_FILTERS].defaultValue\n ) {\n const qualifierEntry = SEARCH_API_FILTERS[key as keyof typeof SEARCH_API_FILTERS]\n const filter = getFilterByName(filters, key)\n\n const currentFilters = state.currentFilters[key as keyof CurrentFilters].map((currentValue) => {\n filter?.options.forEach((option: FilterOption) => {\n if (currentValue === option.value) {\n currentValue = option[qualifierEntry.valueAttribute as keyof FilterOption] as string\n }\n })\n return currentValue\n })\n\n input[qualifierEntry.qualifier] = currentFilters\n }\n })\n\n if (input.tag_id && tags) {\n input.tag_id = (input.tag_id as string[]).map((currentValue: string) => {\n tags.forEach((tag) => {\n if (currentValue === tag.slug) {\n currentValue = tag.id?.toString() || currentValue\n }\n })\n return currentValue\n })\n }\n\n input['quality_score__not'] = 'X'\n return input\n }\n\n function handleFetchingError(error: unknown, isFetchingMore = false, isFetchingPrevious = false): void {\n const errorProps = {\n level: 'alert',\n message:\n 'Oops... an error occured. Please refresh the page to retry. If the error persist, please contact support.',\n ...(error as Record),\n }\n\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n isFetchingMore: false,\n isFetchingPrevious: false,\n error: errorProps,\n errorFetchingMore: isFetchingMore && !isFetchingPrevious,\n errorFetchingPrevious: isFetchingPrevious,\n }))\n }\n\n function handleFetchingSuccess(\n results: api.Project[],\n meta: unknown,\n isFetchingMore = false,\n isFetchingPrevious = false,\n ): void {\n setState((prevState) => ({\n ...prevState,\n isFetching: false,\n isFetchingMore: false,\n isFetchingPrevious: false,\n results: results\n ? isFetchingMore\n ? isFetchingPrevious\n ? [...results, ...prevState.results]\n : [...prevState.results, ...results]\n : results\n : [],\n meta: {\n ...prevState.meta,\n ...(meta as Record),\n totalCount: (meta as { total_count: number }).total_count,\n },\n }))\n }\n\n function handleFetchingPending(\n quantityFetched = DEFAULT_LIMIT,\n isFetchingMore = false,\n isFetchingPrevious = false,\n ): void {\n setState((prevState) => ({\n ...prevState,\n results: isFetchingMore ? prevState.results : [],\n quantityFetched,\n isFetching: !isFetchingMore,\n isFetchingMore: isFetchingMore && !isFetchingPrevious,\n isFetchingPrevious,\n }))\n }\n\n async function requestResults(): Promise {\n handleFetchingPending()\n\n try {\n const qualifiers = parseQualifiers()\n const params = {\n lang: currentLanguage,\n offset: state.meta.offset,\n limit: state.meta.limit,\n }\n\n const response = await fetchSearchProjects(state.currentSearchInput, qualifiers, params, isAuthenticated)\n handleFetchingSuccess(response.projects, response.meta)\n } catch (error) {\n handleFetchingError(error)\n }\n }\n\n async function requestMoreResults(): Promise {\n const quantity = Math.min(state.meta.totalCount - state.meta.offset - state.meta.limit, state.meta.limit)\n\n handleFetchingPending(quantity, true)\n\n try {\n const response = await fetchSearchMoreProjects(state.meta.next || '', isAuthenticated)\n\n if (typeof window !== 'undefined') {\n const url = new URL(window.location.href)\n const next = new URLSearchParams(state.meta.next || '')\n url.searchParams.set('offset', next.get('offset') || '0')\n window.history.replaceState(window.history.state, document.title, url.href)\n }\n\n handleFetchingSuccess(response.projects, response.meta, true)\n } catch (error) {\n handleFetchingError(error)\n }\n }\n\n async function requestPreviousResults(): Promise {\n const totalCount = state.meta.totalCount\n const previous = state.meta.start - state.meta.limit\n const quantity = state.meta.start - Math.max(previous, 0)\n\n handleFetchingPending(quantity, true, true)\n\n try {\n const search = new URLSearchParams(state.meta.next || '')\n search.set('offset', Math.max(previous, 0).toString())\n search.set('limit', quantity.toString())\n\n const response = await fetchSearchMoreProjects(`?${search.toString()}`, isAuthenticated)\n\n if (typeof window !== 'undefined') {\n const url = new URL(window.location.href)\n url.searchParams.set('offset', Math.max(previous, 0).toString())\n window.history.replaceState(window.history.state, document.title, url.href)\n }\n\n handleFetchingSuccess(response.projects, { total_count: totalCount, start: previous }, true, true)\n } catch (error) {\n handleFetchingError(error)\n }\n }\n\n function updateFilter(filterName: keyof CurrentFilters, optionValue: string): void {\n setState((prevState) => ({\n ...prevState,\n currentFilters: {\n ...prevState.currentFilters,\n [filterName]: [optionValue],\n },\n meta: {\n ...prevState.meta,\n offset: DEFAULT_OFFSET,\n limit: DEFAULT_SORT_LIMIT,\n totalCount: 0,\n next: null,\n previous: null,\n },\n }))\n\n setQueryParam(filterName, optionValue)\n setQueryParam('offset', 0)\n }\n\n function updateSorting(value: string): void {\n setState((prevState) => ({\n ...prevState,\n currentSorting: value,\n meta: { ...prevState.meta, offset: DEFAULT_OFFSET, limit: DEFAULT_SORT_LIMIT },\n }))\n setQueryParam('sorting', value)\n }\n\n function handleSearchUpdate(value: string): void {\n setState((prevState) => ({ ...prevState, currentSearchInput: value }))\n }\n\n function onSearchChange(event: React.ChangeEvent): void {\n const value = event.target?.value || ''\n handleSearchUpdate(value)\n }\n\n function onSearchReset(): void {\n setQueryParam('search', undefined, true)\n\n setState((prevState) => ({\n ...prevState,\n currentSearch: '',\n currentSearchInput: '',\n resetSearch: true,\n meta: { ...prevState.meta, offset: DEFAULT_OFFSET, limit: DEFAULT_LIMIT },\n }))\n }\n\n function onSearchSubmit(event: React.FormEvent): void {\n event.preventDefault()\n\n if (state.currentSearchInput !== state.currentSearch) {\n const value = state.currentSearchInput || undefined\n setQueryParam('search', value, true)\n\n const newState = getInitialState({}, state.currentSearchInput, undefined, { offset: DEFAULT_OFFSET })\n setState((prevState) => ({ ...prevState, ...newState }))\n }\n }\n\n function handleLoadMore(): void {\n requestMoreResults()\n }\n\n function handleLoadPrevious(): void {\n requestPreviousResults()\n }\n\n function handleCloseError(): void {\n setState((prevState) => ({ ...prevState, error: null }))\n }\n}\n\nfunction getInitialState(filters = {}, search = '', sorting = DEFAULT_SORTING, meta = {}): Partial {\n return {\n meta: {\n offset: DEFAULT_OFFSET,\n start: DEFAULT_OFFSET,\n limit: DEFAULT_LIMIT,\n totalCount: 0,\n next: null,\n previous: null,\n ...meta,\n },\n currentFilters: {\n categories: ['all'],\n countries: ['all'],\n regions: ['all'],\n cities: ['all'],\n statuses: [search ? 'all' : 'currently'],\n languages: ['all'],\n ...filters,\n },\n currentSearch: search,\n currentSearchInput: search,\n currentSorting: sorting,\n }\n}\n\nfunction parseQueryString(queryParams: string): Record {\n const parameters = parse(queryParams, { ignoreQueryPrefix: true })\n const normalizedParameters: Record = {}\n\n Object.keys(parameters).forEach((key) => {\n if (Array.isArray(parameters[key]) || key === 'offset') {\n normalizedParameters[key] = parameters[key]\n } else {\n normalizedParameters[key] = [parameters[key]]\n }\n })\n\n return normalizedParameters\n}\n\ntype QueryStringParams = {\n sorting: string[] | undefined\n search: string[] | undefined\n offset: string | undefined\n limit: string | undefined\n [key: string]: string[] | string | undefined\n}\n\nfunction getInitialStateFromUrl(): Partial {\n if (typeof window !== 'undefined' && window.location) {\n const { sorting, search, offset, limit, ...filters } = parseQueryString(window.location.search) as QueryStringParams\n const searchValue = (search && search.length > 0 && search[search.length - 1]) || ''\n const sortingValue = (sorting && sorting.length > 0 && sorting[sorting.length - 1]) || DEFAULT_SORTING\n const start = Number(offset) || DEFAULT_OFFSET\n return getInitialState(filters, searchValue, sortingValue, { offset, limit, start })\n }\n\n return getInitialState()\n}\n\nfunction setQueryParam(name: string, value: unknown, reset = false): void {\n if (typeof window === 'undefined') return\n\n const currentQueryParams = reset ? '' : window.location.search\n const parsed = parse(currentQueryParams, { ignoreQueryPrefix: true })\n parsed[name] = value as string\n const stringified = stringify(parsed)\n const character = stringified.length > 0 ? '?' : ''\n window.history.replaceState(null, '', `${window.location.pathname}${character}${stringified}`)\n}\n", "export type FilterOption = {\n id?: number\n value: string\n slug?: string\n}\n\nexport type Filter = {\n name: string\n label: string\n options: FilterOption[]\n}\n\nexport function getFilterByName(filters: Filter[], name: string): Filter | undefined {\n return filters.find((filter) => filter.name === name)\n}\n\nexport function getOptionByValue(options: FilterOption[], value: string): FilterOption | undefined {\n return options.find((option) => option.value === value)\n}\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport AutosizeInput from './AutosizeInput'\n\ntype SearchBarProps = {\n value: string\n onChange: (value: string) => void\n onSubmit: (event: React.FormEvent) => void\n onReset: () => void\n}\n\nfunction SearchBar({ value, onChange, onSubmit, onReset }: SearchBarProps): React.ReactElement {\n const inputRef = React.useRef(null)\n\n React.useEffect(() => {\n if (!value) {\n autoFocus()\n }\n }, [value])\n\n return (\n \n {!value.length && (\n \n \n \n )}\n\n (inputRef.current = el)}\n onChange={(event) => {\n onChange(event.target.value)\n }}\n placeholder={t('Search')}\n value={value}\n />\n\n {value.length > 0 && (\n \n \n \n )}\n \n )\n\n function autoFocus(): void {\n inputRef.current?.focus()\n }\n}\n\nexport default SearchBar\n\nexport const SearchBarWrapper = styled.form`\n background-color: ${plume.COLORS.PRIMARY_BLUE_500};\n color: white;\n display: flex;\n width: 100%;\n height: 87px;\n align-items: center;\n justify-content: center;\n`\n\nexport const SearchLabel = styled.label`\n margin-right: 10px;\n\n svg {\n top: 4px;\n }\n`\n\nexport const ResetButton = styled.span`\n display: inline-flex;\n margin-left: 10px;\n color: ${plume.COLORS.TEXT_PRIMARY};\n cursor: pointer;\n\n &:hover {\n color: ${plume.COLORS.PRIMARY_GREY_000};\n }\n`\n", "/**\n * NOTE: this component is inspired from https://github.com/JedWatson/react-input-autosize\n * It is not in npm dependencies to be able to maintain and change it like we want\n */\n\nimport * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nconst sizerStyle: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n visibility: 'hidden',\n height: 0,\n overflow: 'scroll',\n whiteSpace: 'pre',\n}\n\nconst INPUT_PROPS_BLACKLIST = [\n 'extraWidth',\n 'injectStyles',\n 'inputClassName',\n 'inputRef',\n 'minWidth',\n 'onAutosize',\n 'placeholderIsMinWidth',\n]\n\nconst cleanInputProps = (inputProps: Record): Record => {\n INPUT_PROPS_BLACKLIST.forEach((field) => delete inputProps[field])\n return inputProps\n}\n\nconst copyStyles = (styles: CSSStyleDeclaration, node: HTMLElement): void => {\n node.style.fontSize = styles.fontSize || ''\n node.style.fontFamily = styles.fontFamily || ''\n node.style.fontWeight = styles.fontWeight || ''\n node.style.fontStyle = styles.fontStyle || ''\n node.style.letterSpacing = styles.letterSpacing || ''\n node.style.textTransform = styles.textTransform || ''\n}\n\nconst isIE =\n typeof window !== 'undefined' && window.navigator ? /MSIE |Trident\\/|Edge\\//.test(window.navigator.userAgent) : false\n\nconst generateId = (): string | undefined => {\n // we only need an auto-generated ID for stylesheet injection, which is only\n // used for IE. so if the browser is not IE, this should return undefined.\n return isIE ? '_' + Math.random().toString(36).substring(2, 12) : undefined\n}\n\ntype AutosizeInputProps = {\n className?: string\n defaultValue?: string\n extraWidth?: number | string\n id?: string\n injectStyles?: boolean\n inputClassName?: string\n inputRef?: (el: HTMLInputElement | null) => void\n inputStyle?: React.CSSProperties\n minWidth?: number | string\n onAutosize?: (newWidth: number) => void\n onChange?: (event: React.ChangeEvent) => void\n placeholder?: string\n placeholderIsMinWidth?: boolean\n style?: React.CSSProperties\n value?: string\n type?: string\n}\n\ntype AutosizeInputRef = {\n getInput: () => HTMLInputElement | null\n focus: () => void\n blur: () => void\n select: () => void\n}\n\nconst AutosizeInput = React.forwardRef(\n (\n {\n className,\n defaultValue,\n extraWidth,\n id,\n injectStyles = true,\n inputClassName,\n inputRef,\n inputStyle,\n minWidth = 1,\n onAutosize,\n onChange,\n placeholder,\n placeholderIsMinWidth,\n value,\n type,\n ...otherProps\n },\n ref,\n ) => {\n const [inputWidth, setInputWidth] = React.useState(Number(minWidth))\n const [inputId, setInputId] = React.useState(id || generateId())\n\n const inputElementRef = React.useRef(null)\n const placeHolderSizerRef = React.useRef(null)\n const sizerRef = React.useRef(null)\n const mountedRef = React.useRef(true)\n\n // Expose methods to parent component via ref\n React.useImperativeHandle(ref, () => ({\n getInput: () => inputElementRef.current,\n focus: () => inputElementRef.current?.focus(),\n blur: () => inputElementRef.current?.blur(),\n select: () => inputElementRef.current?.select(),\n }))\n\n // Handle inputRef callback\n const handleInputRef = React.useCallback(\n (el: HTMLInputElement | null) => {\n inputElementRef.current = el\n if (typeof inputRef === 'function') {\n inputRef(el)\n }\n },\n [inputRef],\n )\n\n const copyInputStyles = React.useCallback(() => {\n if (!mountedRef.current || !window.getComputedStyle) {\n return\n }\n\n const inputStyles = inputElementRef.current && window.getComputedStyle(inputElementRef.current)\n\n if (!inputStyles) {\n return\n }\n\n if (sizerRef.current) {\n copyStyles(inputStyles, sizerRef.current)\n }\n\n if (placeHolderSizerRef.current) {\n copyStyles(inputStyles, placeHolderSizerRef.current)\n }\n }, [])\n\n const updateInputWidth = React.useCallback(() => {\n if (!mountedRef.current || !sizerRef.current || typeof sizerRef.current.scrollWidth === 'undefined') {\n return\n }\n\n let newInputWidth: number\n\n if (placeholder && (!value || (value && placeholderIsMinWidth))) {\n const sizerWidth = sizerRef.current.scrollWidth\n const placeholderWidth = placeHolderSizerRef.current?.scrollWidth || 0\n newInputWidth = Math.max(sizerWidth, placeholderWidth) + 2\n } else {\n newInputWidth = sizerRef.current.scrollWidth + 2\n }\n\n // add extraWidth to the detected width. for number types, this defaults to 16 to allow for the stepper UI\n const extraWidthValue = type === 'number' && extraWidth === undefined ? 16 : parseInt(String(extraWidth)) || 0\n newInputWidth += extraWidthValue\n\n if (newInputWidth < Number(minWidth)) {\n newInputWidth = Number(minWidth)\n }\n\n if (newInputWidth !== inputWidth) {\n setInputWidth(newInputWidth)\n }\n }, [placeholder, value, placeholderIsMinWidth, extraWidth, type, minWidth, inputWidth])\n\n React.useEffect(() => {\n mountedRef.current = true\n copyInputStyles()\n updateInputWidth()\n\n return () => {\n mountedRef.current = false\n }\n }, [copyInputStyles, updateInputWidth])\n\n React.useEffect(() => {\n if (id !== undefined) {\n setInputId(id || generateId())\n }\n }, [id])\n\n React.useEffect(() => {\n if (typeof onAutosize === 'function') {\n onAutosize(inputWidth)\n }\n }, [inputWidth, onAutosize])\n\n React.useEffect(() => {\n updateInputWidth()\n }, [value, placeholder, updateInputWidth])\n\n const renderStyles = React.useCallback(() => {\n // this method injects styles to hide IE's clear indicator, which messes\n // with input size detection. the stylesheet is only injected when the\n // browser is IE, and can also be disabled by the `injectStyles` prop.\n return isIE && injectStyles ? (\n \n ) : null\n }, [inputId, injectStyles])\n\n const sizerValue = [defaultValue, value, ''].reduce((previousValue, currentValue) => {\n if (previousValue !== null && previousValue !== undefined) {\n return previousValue\n }\n return currentValue\n })\n\n const finalInputStyle: React.CSSProperties = {\n boxSizing: 'content-box',\n width: `${inputWidth}px`,\n ...inputStyle,\n }\n\n const inputProps = { ...otherProps } as Record\n cleanInputProps(inputProps)\n inputProps.className = inputClassName\n inputProps.id = inputId\n inputProps.style = finalInputStyle\n\n // ensure placeholder and type are forwarded to the actual input element\n if (placeholder !== undefined) {\n ;(inputProps as Record).placeholder = placeholder\n }\n if (type !== undefined) {\n ;(inputProps as Record).type = type\n }\n\n return (\n \n {renderStyles()}\n \n
    \n {sizerValue}\n
    \n {placeholder ? (\n
    \n {placeholder}\n
    \n ) : null}\n
    \n )\n },\n)\n\nAutosizeInput.displayName = 'AutosizeInput'\n\nexport default AutosizeInput\n\nconst Wrapper = styled.div`\n position: relative;\n display: inline-block;\n\n input {\n border: none;\n background: transparent;\n color: ${plume.COLORS.PRIMARY_GREY_000};\n font-family: ${plume.FONTS.PRIMARY_FONT};\n font-size: 28px;\n font-weight: 400;\n max-width: 1060px;\n }\n\n > input::placeholder {\n color: rgba(255, 255, 255, 0.5);\n }\n`\n", "import * as React from 'react'\n\nimport MobileFiltersList from './MobileFiltersList'\nimport DesktopFiltersList from './DesktopFiltersList'\nimport { Filter } from '../../utils/filters'\n\ntype CurrentFilters = {\n [key: string]: string[]\n}\n\ntype FiltersBarProps = {\n currentFilters: CurrentFilters\n filters: Filter[]\n updateFilter: (name: string, value: string) => void\n}\n\nfunction FiltersBar({ filters, currentFilters, updateFilter }: FiltersBarProps): React.ReactElement | null {\n if (!filters || !filters.length) {\n return null\n }\n\n return (\n <>\n handleFilterUpdate(event)}\n />\n \n \n )\n\n function handleFilterUpdate(event): void {\n const filterName = event.target && event.target.name\n const optionValue = event.target && event.target.value\n updateFilter(filterName, optionValue)\n }\n}\n\nexport default FiltersBar\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { DropdownFilter } from '@ulule/owl-kit-components'\n\nimport HorizontalScroller from './HorizontalScroller'\nimport * as S from './styles'\nimport { Filter } from '../../utils/filters'\n\ntype MobileFiltersListProps = {\n filters: Filter[]\n currentFilters: { [key: string]: string[] }\n onUpdateFilter: (event: React.MouseEvent) => void\n}\n\nfunction MobileFiltersList({ filters, currentFilters, onUpdateFilter }: MobileFiltersListProps): React.ReactElement {\n return (\n \n \n \n {filters.map(({ name, label, options }, index) => (\n \n \n \n ))}\n \n \n \n )\n}\n\nexport default MobileFiltersList\n\nconst OnlyMobile = styled.div`\n display: block;\n\n @media screen and (min-width: 1020px) {\n display: none;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nfunction HorizontalScroller({ children }: { children: React.ReactNode }): React.ReactElement {\n const [lowerBound, setLowerBound] = React.useState(false)\n const [higherBound, setHigherBound] = React.useState(false)\n\n React.useEffect(() => {\n onScrollChange()\n }, [])\n\n const scroller = React.useRef(null)\n\n return (\n \n \n {children}\n \n \n )\n\n function isLowerBoundScrolling(): boolean {\n if (!scroller.current) {\n return false\n }\n\n return scroller.current.scrollLeft === 0\n }\n\n function isHigherBoundScrolling(): boolean {\n if (!scroller.current) {\n return false\n }\n\n const clientWidth = scroller.current.clientWidth\n const scrollLeft = scroller.current.scrollLeft\n const scrollWidth = scroller.current.scrollWidth\n\n return clientWidth + scrollLeft >= scrollWidth\n }\n\n function onScrollChange(): void {\n setLowerBound(isLowerBoundScrolling())\n setHigherBound(isHigherBoundScrolling())\n }\n}\n\nexport default HorizontalScroller\n\nexport const HorizontalScrollerContainer = styled.div<{ $lowerBound: boolean; $higherBound: boolean }>`\n width: 100%;\n overflow: hidden;\n\n &::before,\n &::after {\n content: '';\n height: 100%;\n pointer-events: none;\n position: absolute;\n top: 0;\n transition: opacity 250ms ease-in-out;\n width: 100px;\n z-index: 2;\n }\n\n &::before {\n left: 0;\n opacity: ${(props) => (props.$lowerBound ? 0 : 1)};\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 1) 18%,\n rgba(255, 255, 255, 0.85) 34%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n\n &::after {\n right: 0;\n opacity: ${(props) => (props.$higherBound ? 0 : 1)};\n background: linear-gradient(\n -90deg,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 1) 18%,\n rgba(255, 255, 255, 0.85) 34%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n`\n\nexport const Track = styled.div`\n overflow-x: scroll;\n overflow-y: hidden;\n`\n", "import { styled } from 'next-yak'\n\nimport * as plume from '@ulule/owl-kit-components/next'\n\nexport const MobileFiltersBarContainer = styled.div`\n overflow: hidden;\n padding: 10px 0;\n width: 100%;\n`\n\nexport const DesktopFiltersBarContainer = styled.div`\n align-items: flex-start;\n display: flex;\n flex-flow: row nowrap;\n font-weight: 300;\n justify-content: flex-start;\n margin: 0 auto;\n max-width: 1060px;\n padding: 20px 0;\n position: relative;\n`\n\nexport const FiltersListWrapper = styled.div`\n display: flex;\n flex-flow: column nowrap;\n position: relative;\n width: 100%;\n`\n\nexport const FilterItem = styled.li<{ $hidden?: boolean }>`\n display: ${(props) => (props.$hidden ? 'none' : 'flex')};\n`\n\nexport const FiltersList = styled.ul<{ $wrapped?: boolean }>`\n align-items: center;\n display: flex;\n flex-flow: ${(props) => (props.$wrapped ? 'row nowrap' : 'row wrap')};\n justify-content: flex-start;\n list-style-type: none;\n margin: -5px;\n padding: 20px 0;\n\n ${FilterItem} {\n flex: 0 0 auto;\n padding: 5px;\n\n &:first-child {\n padding-left: ${(props) => (props.$wrapped ? '20px' : '5px')};\n }\n\n &:last-child {\n padding-right: ${(props) => (props.$wrapped ? '20px' : '5px')};\n }\n }\n`\n\nexport const FilterOptionItemWrapper = styled.li<{ $selected?: boolean }>`\n align-items: center;\n color: ${(props) => (props.$selected ? plume.COLORS.PRIMARY_BLUE_500 : plume.COLORS.TEXT_PRIMARY)};\n cursor: ${(props) => (props.$selected ? 'default' : 'pointer')};\n display: flex;\n font-size: 13px;\n font-weight: 500;\n pointer-events: ${(props) => (props.$selected ? 'none' : 'auto')};\n\n &:hover {\n color: ${(props) => (props.$selected ? 'inherit' : plume.COLORS.PRIMARY_BLUE_500)};\n }\n`\n\nexport const ToggleFiltersButton = styled.span``\n\nfunction getHeightPropList(nbItems: number): string {\n if (nbItems <= 8) {\n return '60px'\n } else if (nbItems >= 20) {\n return '240px'\n } else {\n return '120px'\n }\n}\n\nfunction getFlexPropItem(nbItems: number): string {\n if (nbItems <= 8) {\n return '0 1 50%'\n } else if (nbItems >= 20) {\n return '0 1 12.5%'\n } else {\n return '0 1 25%'\n }\n}\n\nexport const FilterOptionsListWrapper = styled.ul<{ children: React.ReactNode[] }>`\n align-content: flex-start;\n align-items: flex-start;\n display: flex;\n flex-flow: column wrap;\n height: ${(props) => getHeightPropList(props.children.length)};\n list-style-type: none;\n margin: 20px -10px;\n padding: 0;\n width: 100%;\n\n ${FilterOptionItemWrapper} {\n flex: ${(props) => getFlexPropItem(props.children.length)};\n min-width: 180px;\n padding: 0 10px;\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components'\n\nimport { getFilterByName } from '../../utils/filters'\nimport FilterOptionsList from './FilterOptionsList'\nimport * as S from './styles'\nimport { Filter } from '../../utils/filters'\n\nconst NB_MAX_FILTERS = 3\n\ntype DesktopFiltersListProps = {\n filters: Filter[]\n currentFilters: {\n [key: string]: string[]\n }\n onUpdateFilter: (name: string, value: string) => void\n}\n\nfunction DesktopFiltersList({ filters, currentFilters, onUpdateFilter }: DesktopFiltersListProps): React.ReactElement {\n const [isExpanded, setIsExpanded] = React.useState(false)\n const [expandedFilter, setExpandedFilter] = React.useState(null)\n\n return (\n \n \n \n \n {filters.map((filter, index) => {\n const { name, label, options } = filter\n if (filters.length > NB_MAX_FILTERS + 1 && index >= NB_MAX_FILTERS && !isExpanded) {\n return null\n }\n\n return (\n \n handleClickFilter(event, name)}\n autosize\n />\n \n )\n })}\n {filters.length > NB_MAX_FILTERS + 1 && (\n \n \n {isExpanded ? t('Less filters') : t('More filters')}\n \n \n )}\n \n {expandedFilter && (\n \n )}\n \n \n \n )\n\n function toggleExpanded(): void {\n setIsExpanded(!isExpanded)\n setExpandedFilter(null)\n }\n\n function handleClickFilter(event: React.MouseEvent, filterName: string): void {\n event.preventDefault()\n\n if (expandedFilter && expandedFilter.name === filterName) {\n setExpandedFilter(null)\n } else {\n const nextExpandedFilter = getFilterByName(filters, filterName) as Filter | null\n setExpandedFilter(nextExpandedFilter)\n }\n }\n\n function handleClickOption(event: React.MouseEvent): void {\n event.preventDefault()\n\n const target = event.currentTarget as HTMLElement\n const filterName = target.dataset.filter\n const optionValue = target.dataset.value\n\n if (filterName && optionValue) {\n onUpdateFilter(filterName, optionValue)\n setExpandedFilter(null)\n }\n }\n}\n\nexport default DesktopFiltersList\n\nconst OnlyDesktop = styled.div`\n display: none;\n\n @media screen and (min-width: 1020px) {\n display: block;\n }\n`\n", "import * as React from 'react'\n\nimport * as S from './styles'\n\ntype FilterOptionsListProps = {\n filterName: string\n onClickItem: (event: React.MouseEvent) => void\n options: {\n label: string\n value: string\n }[]\n selectedValue?: string\n}\n\nfunction FilterOptionsList({\n filterName,\n onClickItem,\n options,\n selectedValue,\n}: FilterOptionsListProps): React.ReactElement | null {\n if (!options.length) {\n return null\n }\n\n return (\n \n {options.map((option, index) => (\n \n {option.label}\n \n ))}\n \n )\n}\n\nexport default FilterOptionsList\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t, tc } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\n\nimport * as UFE from '../../UFE'\n\nfunction NoResults(): React.ReactElement {\n const noResultsImg = UFE?.ASSETS?.noResults?.['x1'] ?? ''\n const noResultsImgx2 = UFE?.ASSETS?.noResults?.['x2'] ?? ''\n const noResultsImgx3 = UFE?.ASSETS?.noResults?.['x3'] ?? ''\n\n return (\n \n {t('No\n\n \n {tc('[strong: No results]. We invite you to change your search criteria.', { strong: })}\n \n {t('Some suggestions:')}\n\n \n
  • \n \n {t('Projects ending soon')}\n \n
  • \n
  • \n \n {t('Popular projects')}\n \n
  • \n
  • \n \n \n {t('Reinitialize filters')}\n \n
  • \n
    \n
    \n )\n}\n\nexport default NoResults\n\nconst NoResultsContainer = styled.div`\n border-bottom: 1px solid ${plume.COLORS.PRIMARY_GREY_500};\n margin: 0 auto;\n padding: 20px;\n text-align: center;\n\n strong {\n font-weight: 500;\n }\n`\n\nconst ActionsList = styled.ol`\n list-style-type: none;\n margin: 20px auto;\n padding: 0;\n width: fit-content;\n\n > li {\n width: 100%;\n margin: 10px auto;\n }\n`\n\nconst SuggestionLink = styled(plume.Link)`\n align-items: center;\n display: inline-flex;\n height: 50px;\n\n > div:first-child {\n color: ${plume.COLORS.PRIMARY_GREY_500};\n margin-right: 5px;\n transform: rotate(-180deg);\n transition: transform 200ms ease-out;\n }\n\n &:hover {\n > div:first-child {\n transition: transform 400ms ease-in;\n transform: rotate(180deg);\n }\n }\n`\n", "import * as React from 'react'\nimport { styled } from 'next-yak'\n\nimport { t } from '@owl-nest/localize'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport * as env from '@owl-nest/config'\nimport * as api from '@owl-nest/api-client/latest'\nimport * as services from '@owl-nest/services'\n\nimport SortingBar from '../sortingbar'\nimport ProjectsList from '$components/ProjectsList/ProjectsList'\n\ntype ResultsProps = {\n quantityFetched: number\n canLoadPrevious: boolean\n canLoadMore: boolean\n handleLoadPrevious: () => void\n isFetchingPrevious: boolean\n errorFetchingPrevious: boolean\n isFetching: boolean\n isFetchingMore: boolean\n errorFetchingMore: boolean\n resultsCount: number\n sorting: { value: string; label: string }[]\n currentSorting: string\n updateSorting: (sorting: string) => void\n handleLoadMore: () => void\n results: api.Project[]\n modalImg: {\n '1x': string | undefined\n '2x': string | undefined\n '3x': string | undefined\n }\n}\n\nfunction Results({\n quantityFetched,\n canLoadPrevious,\n canLoadMore,\n handleLoadPrevious,\n isFetchingPrevious,\n errorFetchingPrevious,\n isFetching,\n isFetchingMore,\n errorFetchingMore,\n resultsCount,\n sorting,\n currentSorting,\n updateSorting,\n handleLoadMore,\n results,\n modalImg,\n}: ResultsProps): React.ReactElement {\n const currentLanguage = env.getUserLocale()\n const currentCurrency = env.getUserCurrency()\n const rates = env.CURRENCIES_RATES\n const urls = {\n signin: env.SIGNIN_URL,\n signout: env.SIGNOUT_URL,\n signup: env.SIGNUP_URL,\n discover: env.DISCOVER_URL,\n discoverLandingPage: env.DISCOVER_LANDING_URL,\n home: env.HOMEPAGE_URL,\n proposal: env.PROPOSAL_URL,\n channels: env.CHANNELS_URL,\n discussions: env.DISCUSSIONS_URL,\n }\n const auth = services.user.useAuth()\n const isAuthenticated = auth.type === 'loggedin'\n\n return (\n \n
    \n
    \n
    \n \n
    \n\n {canLoadPrevious && (\n
    \n \n {errorFetchingPrevious ? t('Retry') : t('Load previous projects')}\n \n
    \n )}\n\n
    \n \n
    \n\n {canLoadMore && (\n
    \n \n {errorFetchingMore ? t('Retry') : t('More projects')}\n \n
    \n )}\n
    \n
    \n
    \n )\n}\n\nexport default Results\n\nconst Wrapper = styled.div`\n header {\n position: relative;\n z-index: 2;\n }\n`\n"], "mappings": "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", "names": ["require_is_plain_obj", "__commonJSMin", "exports", "module", "init_define_process_env", "init_sentry_release_injection_stub", "value", "prototype", "BLOCKS", "INLINES", "MARKS", "TOP_LEVEL_BLOCKS", "LIST_ITEM_BLOCKS", "TABLE_BLOCKS", "VOID_BLOCKS", "CONTAINERS", "_a", "HEADINGS", "TEXT_CONTAINERS", "__spreadArray", "V1_NODE_TYPES", "V1_MARKS", "EMPTY_DOCUMENT", "hasValue", "obj", "value", "_i", "key", "isInline", "node", "isBlock", "isText", "isEmptyParagraph", "textNode", "isValidDocument", "document", "MIN_NODES_FOR_STRIPPING", "stripEmptyTrailingParagraphFromDocument", "lastNode", "__assign", "typeMismatchError", "path", "property", "typeName", "minSizeError", "min", "maxSizeError", "max", "enumError", "expected", "unknownPropertyError", "requiredPropertyError", "ObjectAssertion", "_this", "errors", "isPlainObject", "optional", "properties", "unknowns", "assert", "foundErrors", "item", "index", "serializeError", "error", "step", "VOID_CONTENT", "NodeAssertion", "contentRule", "validateData", "$", "_c", "nodeTypes", "_d", "item$", "dataErrors", "_b", "EntityLinkAssertion", "_super", "__extends", "linkType", "contentNodeTypes", "data", "sys$", "HyperLinkAssertion", "assertLink", "Path", "element", "assertText", "text", "mark", "mark$", "assertInlineOrText", "assertList", "assertVoidEntryLink", "assertTableCell", "nodeValidator", "validateNode", "validateRichTextDocument", "appendKeyToValidElement", "element", "key", "isValidElement", "cloneElement", "nodeListToReactComponents", "nodes", "options", "node", "index", "nodeToReactComponent", "renderNode", "renderMark", "renderText", "preserveWhitespace", "helpers", "nodeValue", "match", "lines_1", "jsxLines_1", "line", "React", "value", "mark", "children", "defaultNodeRenderers", "_a", "BLOCKS", "INLINES", "defaultInline", "defaultInlineResource", "_children", "defaultMarkRenderers", "_b", "MARKS", "text", "type", "documentToReactComponents", "richTextDocument", "__assign", "BLOCKS", "exports", "INLINES", "exports", "MARKS", "exports", "blocks_1", "inlines_1", "marks_1", "exports", "_a", "__spreadArray", "require_types", "__commonJSMin", "exports", "init_define_process_env", "init_sentry_release_injection_stub", "require_nodeTypes", "__commonJSMin", "exports", "init_define_process_env", "init_sentry_release_injection_stub", "blocks_1", "exports", "exports", "isInline", "isBlock", "isText", "blocks_1", "inlines_1", "hasValue", "obj", "value", "_i", "_a", "key", "node", "exports", "getSchemaWithNodeType", "nodeType", "__require", "blocks_1", "exports", "inlines_1", "marks_1", "__exportStar", "emptyDocument_1", "helpers", "__importStar", "schemas_1", "init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "n", "init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "React", "ReactDOM", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "init_define_process_env", "init_sentry_release_injection_stub", "import_react", "SausageItemWrapper", "styled", "SausageItemText", "RegularText", "SausageItem", "element", "React", "a", "href", "absolute_url", "name", "init_define_process_env", "init_sentry_release_injection_stub", "PrivateSausageList", "styled", "props", "$isHover", "SausageList", "withPrivatePublicMap", "isHover", "SausageWrapper", "styled", "Sausage", "React", "Component", "constructor", "props", "wrapperRef", "createRef", "handleHover", "hoverState", "setState", "hover", "state", "componentDidMount", "listSize", "current", "firstChild", "getBoundingClientRect", "width", "render", "items", "onMouseOut", "onMouseOver", "ref", "SausageList", "isHover", "length", "map", "element", "key", "SausageItem", "MediaQuery", "minWidth", "Sausage_default", "init_define_process_env", "init_sentry_release_injection_stub", "processData", "json", "f", "init_define_process_env", "init_sentry_release_injection_stub", "React", "usePartnersOperation", "_a", "_b", "language", "getUserLocale", "locale", "LOCALES", "request", "environnement", "CONTENTFUL_ENVIRONMENT", "space", "CONTENTFUL_SPACE_ID", "accessToken", "CONTENTFUL_DELIVERY_TOKEN_MASTER", "client", "rawRequester", "GraphQLClient", "requester", "response", "partnersOperation_exports", "UFE_exports", "__export", "ASSETS", "DEFAULT_ASSETS", "DISCOVER_DATA", "init_define_process_env", "init_sentry_release_injection_stub", "windowLens", "lens", "DEFAULT_ASSETS", "ASSETS", "DISCOVER_DATA", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "import_rich_text_react_renderer", "richtext", "RichText", "document", "links", "renderEntry", "renderMark", "renderNode", "_a", "_b", "blockAssetMap", "blockEntryMap", "asset", "entry", "richTextOptions", "makeRenderMark", "makeRenderNode", "node", "children", "Hyperlink", "EmbeddedAsset", "Component", "text", "Partners", "partners", "length", "Wrapper", "TitleGroup", "SectionTitle", "tc", "highlight", "HighlightedTitle", "color", "List", "SlidingCarousel", "map", "partnerOperation", "index", "PartnerOperationCardWithTracking", "key", "CenteredCTA", "href", "t", "_a", "_b", "_c", "_d", "_e", "partnerOperationRef", "useRef", "shadow", "usePartnershipTracker", "partnerUserId", "undefined", "click", "enabled", "eventPosition", "ignoreLocationChange", "impression", "once", "li", "ref", "PartnerOperationCard", "compact", "translation", "status", "description", "RichText", "document", "json", "renderNode", "Paragraph", "styles", "copy", "S", "regular", "keyTitle", "keyList", "buttonMore", "link", "pictureUrl", "cover", "url", "pictureSrcSet", "url_2x", "url_3x", "isOngoing", "partnersOperation", "PartnerOperationStatus", "ONGOING", "buttonUrl", "urlMore", "linkUrl", "urlProjectList", "styled", "ButtonAsLink", "heading", "L", "attrs", "asDesktop", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "import_qs", "init_define_process_env", "init_sentry_release_injection_stub", "getFilterByName", "filters", "name", "filter", "SEARCH_API_FILTERS", "DEFAULT_SORTING", "DEFAULT_OFFSET", "DEFAULT_LIMIT", "DEFAULT_SORT_LIMIT", "useSearch", "filters", "_sorting", "tags", "currentLanguage", "isAuthenticated", "user_exports", "state", "setState", "getInitialStateFromUrl", "memoizedResults", "memoizedMeta", "memoizedCurrentFilters", "requestResults", "prevState", "updateFilter", "updateSorting", "handleSearchUpdate", "onSearchChange", "onSearchReset", "onSearchSubmit", "handleLoadMore", "handleLoadPrevious", "handleCloseError", "parseQualifiers", "input", "key", "qualifierEntry", "filter", "getFilterByName", "currentFilters", "currentValue", "option", "tag", "_a", "handleFetchingError", "error", "isFetchingMore", "isFetchingPrevious", "errorProps", "handleFetchingSuccess", "results", "meta", "handleFetchingPending", "quantityFetched", "qualifiers", "params", "response", "fetchSearchProjects", "requestMoreResults", "quantity", "fetchSearchMoreProjects", "url", "next", "requestPreviousResults", "totalCount", "previous", "search", "filterName", "optionValue", "setQueryParam", "value", "event", "newState", "getInitialState", "sorting", "parseQueryString", "queryParams", "parameters", "normalizedParameters", "offset", "limit", "searchValue", "sortingValue", "start", "name", "reset", "currentQueryParams", "parsed", "stringified", "character", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "sizerStyle", "position", "top", "left", "visibility", "height", "overflow", "whiteSpace", "INPUT_PROPS_BLACKLIST", "cleanInputProps", "inputProps", "forEach", "field", "copyStyles", "styles", "node", "style", "fontSize", "fontFamily", "fontWeight", "fontStyle", "letterSpacing", "textTransform", "isIE", "window", "navigator", "test", "userAgent", "generateId", "Math", "random", "toString", "substring", "undefined", "AutosizeInput", "forwardRef", "className", "defaultValue", "extraWidth", "id", "injectStyles", "inputClassName", "inputRef", "inputStyle", "minWidth", "onAutosize", "onChange", "placeholder", "placeholderIsMinWidth", "value", "type", "otherProps", "ref", "inputWidth", "setInputWidth", "useState", "Number", "inputId", "setInputId", "inputElementRef", "useRef", "placeHolderSizerRef", "sizerRef", "mountedRef", "useImperativeHandle", "getInput", "current", "focus", "_a", "blur", "select", "handleInputRef", "useCallback", "el", "copyInputStyles", "getComputedStyle", "inputStyles", "updateInputWidth", "scrollWidth", "newInputWidth", "sizerWidth", "placeholderWidth", "max", "extraWidthValue", "parseInt", "String", "useEffect", "renderStyles", "dangerouslySetInnerHTML", "__html", "sizerValue", "reduce", "previousValue", "currentValue", "finalInputStyle", "boxSizing", "width", "Wrapper", "input", "div", "displayName", "AutosizeInput_default", "styled", "SearchBar", "value", "onChange", "onSubmit", "onReset", "inputRef", "useRef", "React", "useEffect", "autoFocus", "SearchBarWrapper", "length", "SearchLabel", "htmlFor", "glyphs", "stroke", "Search", "size", "AutosizeInput", "id", "el", "current", "event", "target", "placeholder", "t", "ResetButton", "onClick", "Close", "title", "_a", "focus", "searchbar_default", "styled", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "HorizontalScroller", "children", "lowerBound", "setLowerBound", "useState", "higherBound", "setHigherBound", "useEffect", "onScrollChange", "scroller", "useRef", "HorizontalScrollerContainer", "$lowerBound", "$higherBound", "Track", "ref", "onScroll", "isLowerBoundScrolling", "current", "scrollLeft", "isHigherBoundScrolling", "clientWidth", "scrollWidth", "HorizontalScroller_default", "styled", "props", "init_define_process_env", "init_sentry_release_injection_stub", "DesktopFiltersBarContainer", "styled", "FiltersListWrapper", "FilterItem", "props", "$hidden", "FiltersList", "$wrapped", "FilterOptionItemWrapper", "$selected", "COLORS", "PRIMARY_BLUE_500", "TEXT_PRIMARY", "getHeightPropList", "nbItems", "getFlexPropItem", "FilterOptionsListWrapper", "styled", "props", "children", "length", "MobileFiltersList", "filters", "currentFilters", "onUpdateFilter", "OnlyMobile", "HorizontalScroller", "FiltersList", "$wrapped", "map", "name", "label", "options", "index", "FilterItem", "key", "DropdownFilter", "onChange", "useDefault", "value", "MobileFiltersList_default", "styled", "init_define_process_env", "init_sentry_release_injection_stub", "React", "init_define_process_env", "init_sentry_release_injection_stub", "React", "FilterOptionsList", "filterName", "onClickItem", "options", "selectedValue", "FilterOptionsListWrapper", "option", "index", "FilterOptionItemWrapper", "FilterOptionsList_default", "NB_MAX_FILTERS", "DesktopFiltersList", "filters", "currentFilters", "onUpdateFilter", "isExpanded", "setIsExpanded", "useState", "expandedFilter", "setExpandedFilter", "OnlyDesktop", "DesktopFiltersBarContainer", "FiltersListWrapper", "FiltersList", "map", "filter", "index", "name", "label", "options", "length", "FilterItem", "key", "DropdownFilter", "value", "focused", "onClick", "event", "handleClickFilter", "autosize", "SecondaryLink", "toggleExpanded", "t", "FilterOptionsList", "filterName", "onClickItem", "handleClickOption", "selectedValue", "preventDefault", "nextExpandedFilter", "getFilterByName", "target", "currentTarget", "dataset", "optionValue", "DesktopFiltersList_default", "styled", "FiltersBar", "filters", "currentFilters", "updateFilter", "MobileFiltersList_default", "event", "handleFilterUpdate", "DesktopFiltersList_default", "filterName", "optionValue", "filtersbar_default", "init_define_process_env", "init_sentry_release_injection_stub", "React", "NoResults", "_a", "_b", "_c", "_d", "_e", "_f", "noResultsImg", "UFE", "ASSETS", "noResults", "noResultsImgx2", "noResultsImgx3", "NoResultsContainer", "img", "src", "srcSet", "alt", "t", "styles", "copy", "M", "light", "tc", "strong", "ActionsList", "li", "ButtonAsLink", "kind", "href", "SuggestionLink", "withIcon", "glyphs", "stroke", "Refresh", "size", "noresults_default", "styled", "Link", "init_define_process_env", "init_sentry_release_injection_stub", "React", "Results", "quantityFetched", "canLoadPrevious", "canLoadMore", "handleLoadPrevious", "isFetchingPrevious", "errorFetchingPrevious", "isFetching", "isFetchingMore", "errorFetchingMore", "resultsCount", "sorting", "currentSorting", "updateSorting", "handleLoadMore", "results", "modalImg", "currentLanguage", "getUserLocale", "currentCurrency", "getUserCurrency", "rates", "CURRENCIES_RATES", "urls", "signin", "SIGNIN_URL", "signout", "SIGNOUT_URL", "signup", "SIGNUP_URL", "discover", "DISCOVER_URL", "discoverLandingPage", "DISCOVER_LANDING_URL", "home", "HOMEPAGE_URL", "proposal", "PROPOSAL_URL", "channels", "CHANNELS_URL", "discussions", "DISCUSSIONS_URL", "isAuthenticated", "user", "useAuth", "type", "Wrapper", "div", "className", "header", "SortingBar", "count", "Button", "loading", "error", "onClick", "kind", "t", "ProjectsList", "dataUTMPageContext", "value", "projects", "nbPlaceholders", "results_default", "styled", "SearchSection", "filters", "sorting", "modalImg", "tags", "currentLanguage", "getUserLocale", "state", "updateFilter", "updateSorting", "handleSearchUpdate", "onSearchReset", "onSearchSubmit", "handleLoadMore", "handleLoadPrevious", "handleCloseError", "useSearch", "searchbar_default", "value", "event", "Banner", "filtersbar_default", "name", "noresults_default", "results_default", "SearchSection_default", "renderApp", "setTag", "language", "getUserLocale", "data", "processData", "DISCOVER_DATA", "container", "document", "getElementById", "createRoot", "render", "App", "window", "addEventListener", "auth", "user", "useAuth", "partnersOperations", "usePartnersOperation", "onGoingPartnersOperations", "filter", "predicate", "status", "partnersOperation", "PartnerOperationStatus", "ONGOING", "type", "Wrapper", "div", "className", "SearchSection", "filters", "sorting", "modalImg", "DEFAULT_ASSETS", "modalRemindMe", "SausageMenu", "items", "categories", "length", "Partners", "partners", "styled", "discover_default"] }