@atlaskit/ads-mcp 0.20.4 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/a11y-fixes/package.json +14 -0
  3. package/a11y-guidelines/package.json +14 -0
  4. package/dist/cjs/entry-points/a11y-fixes.js +12 -0
  5. package/dist/cjs/entry-points/a11y-guidelines.js +12 -0
  6. package/dist/cjs/entry-points/i18n-conversion-guide.js +12 -0
  7. package/dist/cjs/entry-points/migration-registry.js +12 -0
  8. package/dist/cjs/helpers/analytics.js +1 -0
  9. package/dist/cjs/tools/get-all-components/components.codegen.js +3 -3
  10. package/dist/cjs/tools/get-atlaskit-components/atlaskit-components.codegen.js +633 -629
  11. package/dist/es2019/entry-points/a11y-fixes.js +1 -0
  12. package/dist/es2019/entry-points/a11y-guidelines.js +1 -0
  13. package/dist/es2019/entry-points/i18n-conversion-guide.js +1 -0
  14. package/dist/es2019/entry-points/migration-registry.js +1 -0
  15. package/dist/es2019/helpers/analytics.js +1 -0
  16. package/dist/es2019/tools/get-all-components/components.codegen.js +3 -3
  17. package/dist/es2019/tools/get-atlaskit-components/atlaskit-components.codegen.js +633 -629
  18. package/dist/esm/entry-points/a11y-fixes.js +1 -0
  19. package/dist/esm/entry-points/a11y-guidelines.js +1 -0
  20. package/dist/esm/entry-points/i18n-conversion-guide.js +1 -0
  21. package/dist/esm/entry-points/migration-registry.js +1 -0
  22. package/dist/esm/helpers/analytics.js +1 -0
  23. package/dist/esm/tools/get-all-components/components.codegen.js +3 -3
  24. package/dist/esm/tools/get-atlaskit-components/atlaskit-components.codegen.js +633 -629
  25. package/dist/types/entry-points/a11y-fixes.d.ts +1 -0
  26. package/dist/types/entry-points/a11y-guidelines.d.ts +1 -0
  27. package/dist/types/entry-points/i18n-conversion-guide.d.ts +1 -0
  28. package/dist/types/entry-points/migration-registry.d.ts +1 -0
  29. package/dist/types/tools/get-all-components/components.codegen.d.ts +2 -2
  30. package/dist/types/tools/get-atlaskit-components/atlaskit-components.codegen.d.ts +2 -2
  31. package/dist/types-ts4.5/entry-points/a11y-fixes.d.ts +1 -0
  32. package/dist/types-ts4.5/entry-points/a11y-guidelines.d.ts +1 -0
  33. package/dist/types-ts4.5/entry-points/i18n-conversion-guide.d.ts +1 -0
  34. package/dist/types-ts4.5/entry-points/migration-registry.d.ts +1 -0
  35. package/dist/types-ts4.5/tools/get-all-components/components.codegen.d.ts +2 -2
  36. package/dist/types-ts4.5/tools/get-atlaskit-components/atlaskit-components.codegen.d.ts +2 -2
  37. package/i18n-conversion-guide/package.json +14 -0
  38. package/migration-registry/package.json +14 -0
  39. package/package.json +3 -3
  40. package/dist/cjs/tools/migration-guides/registry.js +0 -38
  41. package/dist/es2019/tools/migration-guides/registry.js +0 -25
  42. package/dist/esm/tools/migration-guides/registry.js +0 -27
  43. package/dist/types/tools/migration-guides/registry.d.ts +0 -18
  44. package/dist/types-ts4.5/tools/migration-guides/registry.d.ts +0 -18
@@ -9,8 +9,8 @@ exports.atlaskitComponents = void 0;
9
9
  *
10
10
  * Structured content components from design-system *.docs.tsx files
11
11
  *
12
- * @codegen <<SignedSource::42424c7764db588f50ac98406a12d3d8>>
13
- * @codegenCommand yarn workspace @af/ads-ai-tooling codegen:structured-docs-atlaskit-components
12
+ * @codegen <<SignedSource::bd5b86ae65b6b9e48b637d6a463db4f9>>
13
+ * @codegenCommand yarn workspace @af/ads-ai-tooling codegen:atlaskit-components
14
14
  */
15
15
  /* eslint-disable @repo/internal/react/boolean-prop-naming-convention -- not our types */
16
16
 
@@ -381,6 +381,26 @@ var atlaskitComponents = exports.atlaskitComponents = [{
381
381
  name: 'waitForMediaUpload',
382
382
  type: 'boolean'
383
383
  }]
384
+ }, {
385
+ name: 'Editor Core',
386
+ package: '@atlaskit/editor-extension-dropbox',
387
+ description: 'A an atlassian editor extension to add a native dropbox picker',
388
+ status: 'general-availability',
389
+ usageGuidelines: [],
390
+ contentGuidelines: [],
391
+ accessibilityGuidelines: [],
392
+ keywords: ['editor', 'extension-dropbox', 'atlaskit'],
393
+ category: 'editor',
394
+ examples: ["import React, { useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport SectionMessage from '@atlaskit/section-message';\nimport Modal from '../src/modal';\nexport default (): React.JSX.Element => {\n\tconst [isOpen, setIsOpen] = useState(true);\n\treturn (\n\t\t<>\n\t\t\t<SectionMessage appearance=\"warning\">\n\t\t\t\tInternal component only - not consumable outside this package\n\t\t\t</SectionMessage>\n\t\t\t<Button onClick={() => setIsOpen(true)}>Show Modal</Button>\n\t\t\t<Modal\n\t\t\t\tshowModal={isOpen}\n\t\t\t\tonClose={() => setIsOpen(false)}\n\t\t\t\tTEST_ONLY_src=\"http://localhost:9000/examples.html?groupId=editor&packageId=extension-dropbox&exampleId=bad-example-modal-content\"\n\t\t\t/>\n\t\t</>\n\t);\n};"],
395
+ props: [{
396
+ name: 'appKey',
397
+ type: 'string',
398
+ isRequired: true
399
+ }, {
400
+ name: 'canMountinIframe',
401
+ type: 'boolean',
402
+ isRequired: true
403
+ }]
384
404
  }, {
385
405
  name: 'Editor Plugin Block Controls',
386
406
  package: '@atlaskit/editor-plugin-block-controls',
@@ -508,7 +528,7 @@ var atlaskitComponents = exports.atlaskitComponents = [{
508
528
  examples: ["import applyDevTools from 'prosemirror-dev-tools';\nimport { ComposableEditor } from '@atlaskit/editor-core/composable-editor';\nimport { usePreset } from '@atlaskit/editor-core/use-preset';\nimport { analyticsPlugin } from '@atlaskit/editor-plugins/analytics';\nimport { annotationPlugin } from '@atlaskit/editor-plugins/annotation';\nimport type { AnnotationProviders } from '@atlaskit/editor-plugins/annotation';\nimport { basePlugin } from '@atlaskit/editor-plugins/base';\nimport { blockControlsPlugin } from '@atlaskit/editor-plugins/block-controls';\nimport { blockTypePlugin } from '@atlaskit/editor-plugins/block-type';\nimport { breakoutPlugin } from '@atlaskit/editor-plugins/breakout';\nimport { codeBlockPlugin } from '@atlaskit/editor-plugins/code-block';\nimport { compositionPlugin } from '@atlaskit/editor-plugins/composition';\nimport { contentInsertionPlugin } from '@atlaskit/editor-plugins/content-insertion';\nimport { copyButtonPlugin } from '@atlaskit/editor-plugins/copy-button';\nimport { decorationsPlugin } from '@atlaskit/editor-plugins/decorations';\nimport { editorDisabledPlugin } from '@atlaskit/editor-plugins/editor-disabled';\nimport { emojiPlugin } from '@atlaskit/editor-plugins/emoji';\nimport { expandPlugin } from '@atlaskit/editor-plugins/expand';\nimport { extensionPlugin } from '@atlaskit/editor-plugins/extension';\nimport { floatingToolbarPlugin } from '@atlaskit/editor-plugins/floating-toolbar';\nimport { focusPlugin } from '@atlaskit/editor-plugins/focus';\nimport { gridPlugin } from '@atlaskit/editor-plugins/grid';\nimport { guidelinePlugin } from '@atlaskit/editor-plugins/guideline';\nimport { layoutPlugin } from '@atlaskit/editor-plugins/layout';\nimport { listPlugin } from '@atlaskit/editor-plugins/list';\nimport { mediaPlugin } from '@atlaskit/editor-plugins/media';\nimport { panelPlugin } from '@atlaskit/editor-plugins/panel';\nimport { quickInsertPlugin } from '@atlaskit/editor-plugins/quick-insert';\nimport { rulePlugin } from '@atlaskit/editor-plugins/rule';\nimport { selectionPlugin } from '@atlaskit/editor-plugins/selection';\nimport { selectionToolbarPlugin } from '@atlaskit/editor-plugins/selection-toolbar';\nimport { tablesPlugin } from '@atlaskit/editor-plugins/table';\nimport { tasksAndDecisionsPlugin } from '@atlaskit/editor-plugins/tasks-and-decisions';\nimport { textFormattingPlugin } from '@atlaskit/editor-plugins/text-formatting';\nimport { typeAheadPlugin } from '@atlaskit/editor-plugins/type-ahead';\nimport { widthPlugin } from '@atlaskit/editor-plugins/width';\nimport { LocalUserPreferencesProvider } from './user-preferences-provider';\nexport default function Editor(): React.JSX.Element {\n\tconst localUserPreferencesProvider = new LocalUserPreferencesProvider();\n\tconst { preset } = usePreset((builder) =>\n\t\tbuilder\n\t\t\t.add(basePlugin)\n\t\t\t.add(blockTypePlugin)\n\t\t\t.add(focusPlugin)\n\t\t\t.add(typeAheadPlugin)\n\t\t\t.add(quickInsertPlugin)\n\t\t\t.add(selectionPlugin)\n\t\t\t.add(decorationsPlugin)\n\t\t\t.add(layoutPlugin)\n\t\t\t.add(listPlugin)\n\t\t\t.add([analyticsPlugin, {}])\n\t\t\t.add(contentInsertionPlugin)\n\t\t\t.add(widthPlugin)\n\t\t\t.add(guidelinePlugin)\n\t\t\t.add(textFormattingPlugin)\n\t\t\t.add([\n\t\t\t\ttablesPlugin,\n\t\t\t\t{\n\t\t\t\t\ttableOptions: {\n\t\t\t\t\t\tadvanced: true,\n\t\t\t\t\t\tallowColumnResizing: true,\n\t\t\t\t\t\tallowHeaderRow: true,\n\t\t\t\t\t\tallowTableResizing: true,\n\t\t\t\t\t},\n\t\t\t\t\tisTableScalingEnabled: true,\n\t\t\t\t\tallowContextualMenu: true,\n\t\t\t\t\tfullWidthEnabled: true,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add(emojiPlugin)\n\t\t\t.add(panelPlugin)\n\t\t\t.add(rulePlugin)\n\t\t\t.add(tasksAndDecisionsPlugin)\n\t\t\t.add([expandPlugin, { allowInsertion: true, appearance: 'full-page' }])\n\t\t\t.add(editorDisabledPlugin)\n\t\t\t.add(copyButtonPlugin)\n\t\t\t.add(compositionPlugin)\n\t\t\t.add(codeBlockPlugin)\n\t\t\t.add(blockControlsPlugin)\n\t\t\t.add(breakoutPlugin)\n\t\t\t.add(gridPlugin)\n\t\t\t.add(floatingToolbarPlugin)\n\t\t\t.add([\n\t\t\t\tselectionToolbarPlugin,\n\t\t\t\t{\n\t\t\t\t\tpreferenceToolbarAboveSelection: true,\n\t\t\t\t\tcontextualFormattingEnabled: true,\n\t\t\t\t\tuserPreferencesProvider: localUserPreferencesProvider,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add([\n\t\t\t\tmediaPlugin,\n\t\t\t\t{\n\t\t\t\t\tallowMediaSingle: { disableLayout: true },\n\t\t\t\t\tallowMediaGroup: false,\n\t\t\t\t\tallowResizing: true,\n\t\t\t\t\tisCopyPasteEnabled: true,\n\t\t\t\t\tallowBreakoutSnapPoints: true,\n\t\t\t\t\tallowAdvancedToolBarOptions: true,\n\t\t\t\t\tallowDropzoneDropLine: true,\n\t\t\t\t\tallowMediaSingleEditable: true,\n\t\t\t\t\tallowImagePreview: true,\n\t\t\t\t\tfullWidthEnabled: true,\n\t\t\t\t\twaitForMediaUpload: true,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add([\n\t\t\t\tannotationPlugin,\n\t\t\t\t{\n\t\t\t\t\tinlineComment: {},\n\t\t\t\t} as AnnotationProviders,\n\t\t\t])\n\t\t\t.add(extensionPlugin),\n\t);\n\treturn (\n\t\t<ComposableEditor\n\t\t\tappearance=\"full-page\"\n\t\t\tonChange={(view) => {\n\t\t\t\tapplyDevTools(view);\n\t\t\t}}\n\t\t\tpreset={preset}\n\t\t/>\n\t);\n}"],
509
529
  props: [{
510
530
  name: 'api',
511
- type: '{ selectionToolbar: BasePluginDependenciesAPI<{ actions?: { forceToolbarDockingWithoutAnalytics?: (toolbarDocking: ToolbarDocking) => boolean; refreshToolbarDocking?: () => boolean; setToolbarDocking?: (toolbarDocking: ToolbarDocking) => boolean; suppressToolbar?: () => boolean; unsuppressToolbar?: () => boolean; };...'
531
+ type: '{ selectionToolbar: BasePluginDependenciesAPI<{ actions?: { clearToolbarDockingOverride?: () => boolean; forceToolbarDockingWithoutAnalytics?: (toolbarDocking: ToolbarDocking) => boolean; overrideToolbarDocking?: (toolbarDocking: ToolbarDocking) => boolean; refreshToolbarDocking?: () => boolean; setToolbarDocking?: ...'
512
532
  }, {
513
533
  name: 'config',
514
534
  type: '{ contextualFormattingEnabled?: boolean; disablePin?: boolean; preferenceToolbarAboveSelection?: boolean; userPreferencesProvider?: UserPreferencesProvider; }',
@@ -603,7 +623,7 @@ var atlaskitComponents = exports.atlaskitComponents = [{
603
623
  examples: ["import applyDevTools from 'prosemirror-dev-tools';\nimport { ComposableEditor } from '@atlaskit/editor-core/composable-editor';\nimport { usePreset } from '@atlaskit/editor-core/use-preset';\nimport { analyticsPlugin } from '@atlaskit/editor-plugins/analytics';\nimport { annotationPlugin } from '@atlaskit/editor-plugins/annotation';\nimport type { AnnotationProviders } from '@atlaskit/editor-plugins/annotation';\nimport { basePlugin } from '@atlaskit/editor-plugins/base';\nimport { blockControlsPlugin } from '@atlaskit/editor-plugins/block-controls';\nimport { blockTypePlugin } from '@atlaskit/editor-plugins/block-type';\nimport { breakoutPlugin } from '@atlaskit/editor-plugins/breakout';\nimport { codeBlockPlugin } from '@atlaskit/editor-plugins/code-block';\nimport { compositionPlugin } from '@atlaskit/editor-plugins/composition';\nimport { contentInsertionPlugin } from '@atlaskit/editor-plugins/content-insertion';\nimport { copyButtonPlugin } from '@atlaskit/editor-plugins/copy-button';\nimport { decorationsPlugin } from '@atlaskit/editor-plugins/decorations';\nimport { editorDisabledPlugin } from '@atlaskit/editor-plugins/editor-disabled';\nimport { emojiPlugin } from '@atlaskit/editor-plugins/emoji';\nimport { expandPlugin } from '@atlaskit/editor-plugins/expand';\nimport { extensionPlugin } from '@atlaskit/editor-plugins/extension';\nimport { floatingToolbarPlugin } from '@atlaskit/editor-plugins/floating-toolbar';\nimport { focusPlugin } from '@atlaskit/editor-plugins/focus';\nimport { gridPlugin } from '@atlaskit/editor-plugins/grid';\nimport { guidelinePlugin } from '@atlaskit/editor-plugins/guideline';\nimport { layoutPlugin } from '@atlaskit/editor-plugins/layout';\nimport { listPlugin } from '@atlaskit/editor-plugins/list';\nimport { mediaPlugin } from '@atlaskit/editor-plugins/media';\nimport { panelPlugin } from '@atlaskit/editor-plugins/panel';\nimport { quickInsertPlugin } from '@atlaskit/editor-plugins/quick-insert';\nimport { rulePlugin } from '@atlaskit/editor-plugins/rule';\nimport { selectionPlugin } from '@atlaskit/editor-plugins/selection';\nimport { selectionToolbarPlugin } from '@atlaskit/editor-plugins/selection-toolbar';\nimport { tablesPlugin } from '@atlaskit/editor-plugins/table';\nimport { tasksAndDecisionsPlugin } from '@atlaskit/editor-plugins/tasks-and-decisions';\nimport { textFormattingPlugin } from '@atlaskit/editor-plugins/text-formatting';\nimport { typeAheadPlugin } from '@atlaskit/editor-plugins/type-ahead';\nimport { widthPlugin } from '@atlaskit/editor-plugins/width';\nimport { getUserPreferencesProvider } from '@atlaskit/editor-test-helpers/mock-user-preference-provider';\nimport { userPreferencesPlugin } from '../src';\n/**\n * This is an example Editor class\n * @example return <Editor />\n */\nexport default function Editor(): React.JSX.Element {\n\tconst { preset } = usePreset((builder) =>\n\t\tbuilder\n\t\t\t.add(basePlugin)\n\t\t\t.add(blockTypePlugin)\n\t\t\t.add([userPreferencesPlugin, { userPreferencesProvider: getUserPreferencesProvider() }])\n\t\t\t.add(focusPlugin)\n\t\t\t.add(typeAheadPlugin)\n\t\t\t.add(quickInsertPlugin)\n\t\t\t.add(selectionPlugin)\n\t\t\t.add(decorationsPlugin)\n\t\t\t.add(layoutPlugin)\n\t\t\t.add(listPlugin)\n\t\t\t.add([analyticsPlugin, {}])\n\t\t\t.add(contentInsertionPlugin)\n\t\t\t.add(widthPlugin)\n\t\t\t.add(guidelinePlugin)\n\t\t\t.add(textFormattingPlugin)\n\t\t\t.add([\n\t\t\t\ttablesPlugin,\n\t\t\t\t{\n\t\t\t\t\ttableOptions: {\n\t\t\t\t\t\tadvanced: true,\n\t\t\t\t\t\tallowColumnResizing: true,\n\t\t\t\t\t\tallowHeaderRow: true,\n\t\t\t\t\t\tallowTableResizing: true,\n\t\t\t\t\t},\n\t\t\t\t\tisTableScalingEnabled: true,\n\t\t\t\t\tallowContextualMenu: true,\n\t\t\t\t\tfullWidthEnabled: true,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add(emojiPlugin)\n\t\t\t.add(panelPlugin)\n\t\t\t.add(rulePlugin)\n\t\t\t.add(tasksAndDecisionsPlugin)\n\t\t\t.add([expandPlugin, { allowInsertion: true, appearance: 'full-page' }])\n\t\t\t.add(editorDisabledPlugin)\n\t\t\t.add(copyButtonPlugin)\n\t\t\t.add(compositionPlugin)\n\t\t\t.add(codeBlockPlugin)\n\t\t\t.add(blockControlsPlugin)\n\t\t\t.add(breakoutPlugin)\n\t\t\t.add(gridPlugin)\n\t\t\t.add(floatingToolbarPlugin)\n\t\t\t.add([\n\t\t\t\tselectionToolbarPlugin,\n\t\t\t\t{\n\t\t\t\t\tpreferenceToolbarAboveSelection: true,\n\t\t\t\t\tcontextualFormattingEnabled: true,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add([\n\t\t\t\tmediaPlugin,\n\t\t\t\t{\n\t\t\t\t\tallowMediaSingle: { disableLayout: true },\n\t\t\t\t\tallowMediaGroup: false,\n\t\t\t\t\tallowResizing: true,\n\t\t\t\t\tisCopyPasteEnabled: true,\n\t\t\t\t\tallowBreakoutSnapPoints: true,\n\t\t\t\t\tallowAdvancedToolBarOptions: true,\n\t\t\t\t\tallowDropzoneDropLine: true,\n\t\t\t\t\tallowMediaSingleEditable: true,\n\t\t\t\t\tallowImagePreview: true,\n\t\t\t\t\tfullWidthEnabled: true,\n\t\t\t\t\twaitForMediaUpload: true,\n\t\t\t\t},\n\t\t\t])\n\t\t\t.add([\n\t\t\t\tannotationPlugin,\n\t\t\t\t{\n\t\t\t\t\tinlineComment: {},\n\t\t\t\t} as AnnotationProviders,\n\t\t\t])\n\t\t\t.add(extensionPlugin),\n\t);\n\treturn (\n\t\t<ComposableEditor\n\t\t\tappearance=\"full-page\"\n\t\t\tonChange={(view) => {\n\t\t\t\tapplyDevTools(view);\n\t\t\t}}\n\t\t\tpreset={preset}\n\t\t/>\n\t);\n}"],
604
624
  props: [{
605
625
  name: 'api',
606
- type: '{ userPreferences: BasePluginDependenciesAPI<{ actions: { getUserPreferences: () => ResolvedUserPreferences; updateUserPreference: (key: "toolbarDockingPosition", value: "top" | "none") => EditorCommand; }; dependencies: [...]; pluginConfiguration: UserPreferencesPluginOptions; sharedState: UserPreferencesSharedStat...'
626
+ type: '{ userPreferences: BasePluginDependenciesAPI<{ actions: { getUserPreferences: () => ResolvedUserPreferences; updateUserPreference: (key: "toolbarDockingPosition", value: "top" | "none") => EditorCommand; }; commands: { ...; }; dependencies: [...]; pluginConfiguration: UserPreferencesPluginOptions; sharedState: UserP...'
607
627
  }, {
608
628
  name: 'config',
609
629
  type: '{ initialUserPreferences?: ResolvedUserPreferences; userPreferencesProvider?: UserPreferencesProvider; }',
@@ -667,264 +687,219 @@ var atlaskitComponents = exports.atlaskitComponents = [{
667
687
  isRequired: true
668
688
  }]
669
689
  }, {
670
- name: 'Editor Core',
671
- package: '@atlaskit/editor-extension-dropbox',
672
- description: 'A an atlassian editor extension to add a native dropbox picker',
690
+ name: 'AssetsConfigModal',
691
+ package: '@atlaskit/link-datasource',
692
+ description: 'Configuration modal for the Assets (object schema) datasource. Lets users set up a list of links from an Assets schema and produces Assets datasource ADF.',
673
693
  status: 'general-availability',
674
- usageGuidelines: [],
694
+ usageGuidelines: ['Use when the user is configuring an Assets-based list of links. On confirm, use the returned parameters for datasource ADF or table view.'],
675
695
  contentGuidelines: [],
676
- accessibilityGuidelines: [],
677
- keywords: ['editor', 'extension-dropbox', 'atlaskit'],
678
- category: 'editor',
679
- examples: ["import React, { useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport SectionMessage from '@atlaskit/section-message';\nimport Modal from '../src/modal';\nexport default (): React.JSX.Element => {\n\tconst [isOpen, setIsOpen] = useState(true);\n\treturn (\n\t\t<>\n\t\t\t<SectionMessage appearance=\"warning\">\n\t\t\t\tInternal component only - not consumable outside this package\n\t\t\t</SectionMessage>\n\t\t\t<Button onClick={() => setIsOpen(true)}>Show Modal</Button>\n\t\t\t<Modal\n\t\t\t\tshowModal={isOpen}\n\t\t\t\tonClose={() => setIsOpen(false)}\n\t\t\t\tTEST_ONLY_src=\"http://localhost:9000/examples.html?groupId=editor&packageId=extension-dropbox&exampleId=bad-example-modal-content\"\n\t\t\t/>\n\t\t</>\n\t);\n};"],
696
+ accessibilityGuidelines: ['Ensure the modal has an accessible title and that schema/object pickers have clear labels.'],
697
+ keywords: ['link-datasource', 'assets', 'datasource', 'config', 'modal'],
698
+ category: 'linking',
699
+ examples: ["import React, { useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { mockAssetsClientFetchRequests } from '@atlaskit/link-test-helpers/assets';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { ASSETS_LIST_OF_LINKS_DATASOURCE_ID, type AssetsDatasourceParameters } from '../../src';\nimport JSMAssetsConfigModal from '../../src/ui/assets-modal';\nmockAssetsClientFetchRequests({ delayedResponse: false });\nconst mockVisibleColumnKeys = [\n\t'Key',\n\t'Label',\n\t'Created',\n\t'Is Virtual',\n\t'Hardware Components',\n\t'Applications',\n\t'Software Services',\n\t'Number of Slots',\n\t'Primary Capability',\n\t'Owners',\n\t'Notes',\n];\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [parameters] = useState<AssetsDatasourceParameters>({\n\t\taql: 'dummy aql',\n\t\tworkspaceId: '',\n\t\tschemaId: '1',\n\t});\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(mockVisibleColumnKeys);\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\tToggle Modal\n\t\t\t</Button>\n\t\t\t{showModal && (\n\t\t\t\t<JSMAssetsConfigModal\n\t\t\t\t\tdatasourceId={ASSETS_LIST_OF_LINKS_DATASOURCE_ID}\n\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\tparameters={parameters}\n\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</SmartCardProvider>\n\t);\n};"],
680
700
  props: [{
681
- name: 'appKey',
701
+ name: 'columnCustomSizes',
702
+ type: 'ColumnSizesMap',
703
+ description: 'Map of column key to custom column width'
704
+ }, {
705
+ name: 'datasourceId',
682
706
  type: 'string',
707
+ description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
683
708
  isRequired: true
684
709
  }, {
685
- name: 'canMountinIframe',
710
+ name: 'disableDisplayDropdown',
686
711
  type: 'boolean',
712
+ description: 'Disable the view mode display dropdown'
713
+ }, {
714
+ name: 'onCancel',
715
+ type: '() => void',
716
+ description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
717
+ isRequired: true
718
+ }, {
719
+ name: 'onInsert',
720
+ type: '(adf: InlineCardAdf | AssetsDatasourceAdf, analyticsEvent?: UIAnalyticsEvent) => void',
721
+ description: 'Callback function to be invoked when the insert issues button is clicked',
687
722
  isRequired: true
723
+ }, {
724
+ name: 'parameters',
725
+ type: 'DatasourceParameters | AssetsDatasourceParameters',
726
+ description: 'Parameters for making the data requests necessary to render data within the table'
727
+ }, {
728
+ name: 'shouldReturnFocus',
729
+ type: 'boolean | React.RefObject<HTMLElement>',
730
+ description: 'Set the focus to return to the element that had focus before focus lock was activated or pass through a specific ref element\nDefaults to false, meaning focus remains where it was when the FocusLock was deactivated'
731
+ }, {
732
+ name: 'url',
733
+ type: 'string',
734
+ description: 'The url that was used to insert a List of Links'
735
+ }, {
736
+ name: 'viewMode',
737
+ type: '"table" | "inline"',
738
+ description: "The view mode that the modal will show on open:\n- Table = Displays a list of links in table format\n- Inline = Presents a smart link that shows the count of query results. However, if there's only one result, it converts to an inline smart link of that issue."
739
+ }, {
740
+ name: 'visibleColumnKeys',
741
+ type: 'string[]',
742
+ description: 'List of properties/column keys that are visible/selected'
743
+ }, {
744
+ name: 'wrappedColumnKeys',
745
+ type: 'string[]',
746
+ description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
688
747
  }]
689
748
  }, {
690
- name: 'Renderer',
691
- package: '@atlaskit/renderer',
692
- description: 'Renderer component',
749
+ name: 'ConfluenceSearchConfigModal',
750
+ package: '@atlaskit/link-datasource',
751
+ description: 'Configuration modal for the Confluence search datasource. Lets users set up a "list of links" backed by a Confluence search query (space, query, sort) and produces Confluence search datasource ADF.',
693
752
  status: 'general-availability',
694
- usageGuidelines: ['Use ReactRenderer with an ADF document; use a transformer (e.g. BitbucketTransformer) with ADFEncoder when your storage format is not ADF.', 'Avoid unnecessary props changes: extract static objects to constants, avoid passing new objects or anonymous functions on every render, use useMemo/useCallback for props and callbacks to prevent performance degradation.', 'Ensure only one version of Renderer sub-dependencies (adf-schema, editor-common, prosemirror-model, etc.) in your bundles; use deduplication or resolutions. Use correct peer dependency versions.', 'Use the truncated prop with maxHeight/fadeOutHeight when you need to cap rendered content with a fade; add polyfills for fetch and ES6/ES7 when targeting older browsers.'],
753
+ usageGuidelines: ['Use when the user is configuring a Confluence search-based list of links (e.g. in a block or sidebar). On confirm, use the returned parameters to build datasource ADF or pass to DatasourceTableView.'],
695
754
  contentGuidelines: [],
696
- accessibilityGuidelines: [],
697
- keywords: ['editor', 'renderer', 'atlaskit'],
698
- category: 'editor',
699
- examples: ["import type { ChangeEvent } from 'react';\nimport RendererDemo from './helper/RendererDemo';\nimport { SmartCardProvider, CardClient } from '@atlaskit/link-provider';\nimport { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';\nimport type { ADFStage } from '@atlaskit/editor-common/validator';\nconst ADF_STAGE0 = 'stage0';\nconst ADF_FINAL = 'final';\nexport default function Example(): React.JSX.Element {\n\tconst [adfStage, setAdfStage] = React.useState<ADFStage>(ADF_FINAL);\n\tconst schema = getSchemaBasedOnStage(adfStage);\n\tconst onSchemaToggle = (event: ChangeEvent<HTMLInputElement>) => {\n\t\tsetAdfStage(event.currentTarget.checked ? ADF_STAGE0 : ADF_FINAL);\n\t};\n\tconst toggleCheckbox = (\n\t\t<label>\n\t\t\t{\n\t\t\t<input type=\"checkbox\" checked={adfStage === ADF_STAGE0} onChange={onSchemaToggle} />\n\t\t\tUse stage0 (experimental) document schema\n\t\t</label>\n\t);\n\treturn (\n\t\t<SmartCardProvider client={new CardClient('staging')}>\n\t\t\t<RendererDemo\n\t\t\t\tallowColumnSorting\n\t\t\t\tallowSelectAllTrap\n\t\t\t\tallowWrapCodeBlock\n\t\t\t\tallowCopyToClipboard\n\t\t\t\tserializer=\"react\"\n\t\t\t\tadfStage={adfStage}\n\t\t\t\tschema={schema}\n\t\t\t\tactionButtons={toggleCheckbox}\n\t\t\t\twithProviders\n\t\t\t/>\n\t\t</SmartCardProvider>\n\t);\n}", 'import RendererDemo from \'./helper/RendererDemo\';\nimport {\n\tNORMAL_SEVERITY_THRESHOLD,\n\tDEGRADED_SEVERITY_THRESHOLD,\n} from \'../../renderer/src/ui/Renderer\';\nexport default function Example(): React.JSX.Element {\n\treturn (\n\t\t<RendererDemo\n\t\t\tappearance="full-page"\n\t\t\tserializer="react"\n\t\t\tallowHeadingAnchorLinks\n\t\t\tallowColumnSorting={true}\n\t\t\tallowCopyToClipboard\n\t\t\tallowWrapCodeBlock\n\t\t\tUNSTABLE_allowTableAlignment\n\t\t\tUNSTABLE_allowTableResizing\n\t\t\tanalyticsEventSeverityTracking={{\n\t\t\t\tenabled: true,\n\t\t\t\tseverityNormalThreshold: NORMAL_SEVERITY_THRESHOLD,\n\t\t\t\tseverityDegradedThreshold: DEGRADED_SEVERITY_THRESHOLD,\n\t\t\t}}\n\t\t/>\n\t);\n}', 'import RendererDemo from \'./helper/RendererDemo\';\nexport default function Example(): React.JSX.Element {\n\treturn <RendererDemo withProviders={true} serializer="react" />;\n}'],
755
+ accessibilityGuidelines: ['Ensure the modal has an accessible title and focus is trapped; form fields (space, query, sort) must have labels and error messages announced.'],
756
+ keywords: ['link-datasource', 'confluence', 'search', 'datasource', 'config', 'modal'],
757
+ category: 'linking',
758
+ examples: ["import React, { useState } from 'react';\nimport { IntlProvider } from 'react-intl';\nimport Button from '@atlaskit/button/standard-button';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport {\n\tdefaultInitialVisibleConfluenceColumnKeys,\n\tmockBasicFilterAGGFetchRequests,\n\tmockDatasourceFetchRequests,\n\tmockProductsData,\n\tmockSiteData,\n} from '@atlaskit/link-test-helpers/datasource';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { CONFLUENCE_SEARCH_DATASOURCE_ID } from '../../src/ui/confluence-search-modal';\nimport { ConfluenceSearchConfigModal } from '../../src/ui/confluence-search-modal/modal';\nimport { type ConfluenceSearchDatasourceParameters } from '../../src/ui/confluence-search-modal/types';\nmockDatasourceFetchRequests({\n\ttype: 'confluence',\n\tdelayedResponse: false,\n\tshouldMockORSBatch: true,\n\tavailableSitesOverride: mockSiteData.filter(\n\t\t(site) => !['test1', 'test2', 'test4'].includes(site.displayName),\n\t),\n\taccessibleProductsOverride: mockProductsData.filter((product) =>\n\t\t['confluence.ondemand'].includes(product.productId),\n\t),\n});\nmockBasicFilterAGGFetchRequests();\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [parameters] = useState<ConfluenceSearchDatasourceParameters>({\n\t\tcloudId: '67899',\n\t\tsearchString: 'Searched something',\n\t});\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(\n\t\tdefaultInitialVisibleConfluenceColumnKeys,\n\t);\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<IntlProvider locale=\"en\">\n\t\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\t\tToggle Modal\n\t\t\t\t</Button>\n\t\t\t\t{showModal && (\n\t\t\t\t\t<ConfluenceSearchConfigModal\n\t\t\t\t\t\tdatasourceId={CONFLUENCE_SEARCH_DATASOURCE_ID}\n\t\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\t\tparameters={parameters}\n\t\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SmartCardProvider>\n\t\t</IntlProvider>\n\t);\n};"],
700
759
  props: [{
701
- name: 'addTelepointer',
702
- type: 'boolean',
703
- description: 'When enabled a trailing telepointer will be added to the rendered document\nfollowing content updates.\n\nContent is updated by passing a new value prop to the renderer.\n\nThe trailing pointer is updated by dom injection to the last text node which\nis updated as a result of a content update.'
760
+ name: 'columnCustomSizes',
761
+ type: 'ColumnSizesMap',
762
+ description: 'Map of column key to custom column width'
704
763
  }, {
705
- name: 'adfStage',
706
- type: '"final" | "stage0"'
764
+ name: 'datasourceId',
765
+ type: 'string',
766
+ description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
767
+ isRequired: true
707
768
  }, {
708
- name: 'allowAltTextOnImages',
709
- type: 'boolean'
769
+ name: 'disableDisplayDropdown',
770
+ type: 'boolean',
771
+ description: 'Disable the view mode display dropdown'
710
772
  }, {
711
- name: 'allowAnnotations',
773
+ name: 'disableSiteSelector',
712
774
  type: 'boolean'
713
775
  }, {
714
- name: 'allowColumnSorting',
715
- type: 'boolean'
776
+ name: 'onCancel',
777
+ type: '() => void',
778
+ description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
779
+ isRequired: true
716
780
  }, {
717
- name: 'allowCopyToClipboard',
718
- type: 'boolean'
781
+ name: 'onInsert',
782
+ type: '(adf: InlineCardAdf | ConfluenceSearchDatasourceAdf, analyticsEvent?: UIAnalyticsEvent) => void',
783
+ description: 'Callback function to be invoked when the insert issues button is clicked',
784
+ isRequired: true
719
785
  }, {
720
- name: 'allowCustomPanels',
721
- type: 'boolean'
786
+ name: 'overrideParameters',
787
+ type: '{ entityTypes?: string[]; }'
722
788
  }, {
723
- name: 'allowFixedColumnWidthOption',
724
- type: 'boolean'
789
+ name: 'parameters',
790
+ type: 'DatasourceParameters | ConfluenceSearchDatasourceParameters',
791
+ description: 'Parameters for making the data requests necessary to render data within the table'
725
792
  }, {
726
- name: 'allowHeadingAnchorLinks',
727
- type: 'boolean | HeadingAnchorLinksConfig'
793
+ name: 'shouldReturnFocus',
794
+ type: 'boolean | React.RefObject<HTMLElement>',
795
+ description: 'Set the focus to return to the element that had focus before focus lock was activated or pass through a specific ref element\nDefaults to false, meaning focus remains where it was when the FocusLock was deactivated'
728
796
  }, {
729
- name: 'allowPlaceholderText',
730
- type: 'boolean'
797
+ name: 'url',
798
+ type: 'string',
799
+ description: 'The url that was used to insert a List of Links'
731
800
  }, {
732
- name: 'allowRendererContainerStyles',
733
- type: 'boolean'
801
+ name: 'viewMode',
802
+ type: '"table" | "inline"',
803
+ description: "The view mode that the modal will show on open:\n- Table = Displays a list of links in table format\n- Inline = Presents a smart link that shows the count of query results. However, if there's only one result, it converts to an inline smart link of that issue."
734
804
  }, {
735
- name: 'allowSelectAllTrap',
736
- type: 'boolean'
805
+ name: 'visibleColumnKeys',
806
+ type: 'string[]',
807
+ description: 'List of properties/column keys that are visible/selected'
737
808
  }, {
738
- name: 'allowUgcScrubber',
739
- type: 'boolean'
809
+ name: 'wrappedColumnKeys',
810
+ type: 'string[]',
811
+ description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
812
+ }]
813
+ }, {
814
+ name: 'DatasourceTableView',
815
+ package: '@atlaskit/link-datasource',
816
+ description: 'Table view component that renders a datasource (list of links) with configurable columns, sorting, and actions. Consumes datasource ADF or parameters and fetches data via the link client.',
817
+ status: 'general-availability',
818
+ usageGuidelines: ['Use when you need to display a list of links (Jira issues, Confluence search, Assets) in a table. Pass the datasource ADF or parameters; wrap in SmartCardProvider so resolution and actions work.'],
819
+ contentGuidelines: [],
820
+ accessibilityGuidelines: ['Ensure the table has a caption or aria-label; column headers and sort controls must be focusable and announced. Loading and error states should be announced.'],
821
+ keywords: ['link-datasource', 'table', 'datasource', 'list of links', 'view'],
822
+ category: 'linking',
823
+ examples: ["import { DatasourceTableView } from '@atlaskit/link-datasource';\nimport { ExampleJiraIssuesTableView } from '../examples-helpers/buildJiraIssuesTable';\nimport { FakeModalDialogContainer } from '../examples-helpers/fakeModalDialogContainer';\nexport default (): React.JSX.Element => {\n\treturn (\n\t\t<FakeModalDialogContainer>\n\t\t\t<ExampleJiraIssuesTableView DatasourceTable={DatasourceTableView} />\n\t\t</FakeModalDialogContainer>\n\t);\n};"],
824
+ props: [{
825
+ name: 'columnCustomSizes',
826
+ type: 'ColumnSizesMap',
827
+ description: 'Map of column key to custom column width'
740
828
  }, {
741
- name: 'allowWrapCodeBlock',
742
- type: 'boolean'
829
+ name: 'datasourceId',
830
+ type: 'string',
831
+ description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
832
+ isRequired: true
743
833
  }, {
744
- name: 'analyticsEventSeverityTracking',
745
- type: '{ enabled: boolean; severityDegradedThreshold: number; severityNormalThreshold: number; }'
834
+ name: 'onColumnResize',
835
+ type: '(key: string, width: number) => void'
746
836
  }, {
747
- name: 'annotationProvider',
748
- type: '{ annotationManager?: AnnotationManager; inlineComment: InlineCommentAnnotationProvider; }'
837
+ name: 'onVisibleColumnKeysChange',
838
+ type: '(visibleColumnKeys: string[]) => void',
839
+ description: 'Callback to be invoked whenever a user changes the visible columns in a datasource table\neither by selecting/unselecting or reordering (drag and drop)\n\n@param visibleColumnKeys the array of keys for all of the selected columns'
749
840
  }, {
750
- name: 'appearance',
751
- type: '"comment" | "full-page" | "full-width" | "max"'
841
+ name: 'onWrappedColumnChange',
842
+ type: '(key: string, shouldWrap: boolean) => void',
843
+ description: 'Callback to be invoked whenever user changes wrap attribute of the column.\n\n@param key Column key\n@param shouldWrap Whenever column should wrap'
752
844
  }, {
753
- name: 'createSerializer',
754
- type: '(init: ReactSerializerInit) => Serializer<JSX.Element>',
755
- description: 'Creates a new `Serializer` to transform the ADF `document` into `JSX.Element`.\nAllows Confluence to implement {@link https://hello.atlassian.net/wiki/spaces/~lmarinov/pages/5177285037/COMPLEXIT+Progressive+rendering+of+ADF progressive rendering}.'
845
+ name: 'parameters',
846
+ type: 'DatasourceParameters',
847
+ description: 'Parameters for making the data requests necessary to render data within the table',
848
+ isRequired: true
756
849
  }, {
757
- name: 'dataProviders',
758
- type: 'ProviderFactory'
850
+ name: 'scrollableContainerHeight',
851
+ type: 'number',
852
+ description: 'If this number is set it will restrict (max-height) maximum size of the component AND make main container a scrollable container.\nIt this number is 0 it will not restrict height and not make container scrollable.'
759
853
  }, {
760
- name: 'disableActions',
761
- type: 'boolean'
854
+ name: 'url',
855
+ type: 'string',
856
+ description: 'Url for an existing datasource, initially used for displaying to a user unauthorized to query that site'
762
857
  }, {
763
- name: 'disableHeadingIDs',
764
- type: 'boolean'
858
+ name: 'visibleColumnKeys',
859
+ type: 'string[]',
860
+ description: 'List of properties/column keys that are visible/selected'
765
861
  }, {
766
- name: 'disableTableOverflowShadow',
767
- type: 'boolean',
768
- description: 'When true, disables the overflow shadow (visual indication) on the edges\nof tables.'
862
+ name: 'wrappedColumnKeys',
863
+ type: 'string[]',
864
+ description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
865
+ }]
866
+ }, {
867
+ name: 'JiraIssuesConfigModal',
868
+ package: '@atlaskit/link-datasource',
869
+ description: 'Configuration modal for the Jira issues datasource. Lets users set up a list of Jira issues (JQL, columns, filters) and produces Jira issues datasource ADF.',
870
+ status: 'general-availability',
871
+ usageGuidelines: ['Use when the user is configuring a Jira issues list (e.g. in a block or table). On confirm, use the returned parameters for datasource ADF or DatasourceTableView.'],
872
+ contentGuidelines: [],
873
+ accessibilityGuidelines: ['Ensure the modal has an accessible title and focus management; JQL and column pickers must have clear labels and error announcements.'],
874
+ keywords: ['link-datasource', 'jira', 'issues', 'datasource', 'config', 'modal', 'JQL'],
875
+ category: 'linking',
876
+ examples: ["import React, { useState } from 'react';\nimport { IntlProvider } from 'react-intl';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport {\n\tdefaultInitialVisibleJiraColumnKeys,\n\tmockBasicFilterAGGFetchRequests,\n\tmockDatasourceFetchRequests,\n\tmockProductsData,\n\tmockSiteData,\n} from '@atlaskit/link-test-helpers/datasource';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { JIRA_LIST_OF_LINKS_DATASOURCE_ID, JiraIssuesConfigModal } from '../../src';\nmockDatasourceFetchRequests({\n\tdelayedResponse: false,\n\tshouldMockORSBatch: true,\n\tavailableSitesOverride: mockSiteData\n\t\t.map((site, index) => ({\n\t\t\t...site,\n\t\t\tcloudId: index === 0 ? 'doc-cloudId' : site.cloudId,\n\t\t}))\n\t\t.filter((site) => !['test1', 'test2', 'test4'].includes(site.displayName)),\n\taccessibleProductsOverride: mockProductsData\n\t\t.filter((product) => ['jira-servicedesk.ondemand'].includes(product.productId))\n\t\t.flatMap((product) => ({\n\t\t\t...product,\n\t\t\tworkspaces: product.workspaces?.map((workspace, index) => ({\n\t\t\t\t...workspace,\n\t\t\t\tcloudId: index === 0 ? 'doc-cloudId' : workspace.cloudId,\n\t\t\t})),\n\t\t})),\n});\nmockBasicFilterAGGFetchRequests({ withJiraFilterHydration: false });\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(defaultInitialVisibleJiraColumnKeys);\n\tconst [columnCustomSizes] = useState<{ [key: string]: number } | undefined>();\n\tconst [wrappedColumnKeys] = useState<string[] | undefined>();\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<IntlProvider locale=\"en\">\n\t\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\t\tToggle Modal\n\t\t\t\t</Button>\n\t\t\t\t{showModal && (\n\t\t\t\t\t<JiraIssuesConfigModal\n\t\t\t\t\t\tdatasourceId={JIRA_LIST_OF_LINKS_DATASOURCE_ID}\n\t\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\t\tcolumnCustomSizes={columnCustomSizes}\n\t\t\t\t\t\twrappedColumnKeys={wrappedColumnKeys}\n\t\t\t\t\t\tparameters={{ cloudId: 'doc-cloudId' }}\n\t\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SmartCardProvider>\n\t\t</IntlProvider>\n\t);\n};", "import { DatasourceTableView } from '@atlaskit/link-datasource';\nimport { ExampleJiraIssuesTableView } from '../examples-helpers/buildJiraIssuesTable';\nimport { FakeModalDialogContainer } from '../examples-helpers/fakeModalDialogContainer';\nexport default (): React.JSX.Element => {\n\treturn (\n\t\t<FakeModalDialogContainer>\n\t\t\t<ExampleJiraIssuesTableView DatasourceTable={DatasourceTableView} />\n\t\t</FakeModalDialogContainer>\n\t);\n};"],
877
+ props: [{
878
+ name: 'columnCustomSizes',
879
+ type: 'ColumnSizesMap',
880
+ description: 'Map of column key to custom column width'
769
881
  }, {
770
- name: 'document',
771
- type: 'DocNode',
882
+ name: 'datasourceId',
883
+ type: 'string',
884
+ description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
772
885
  isRequired: true
773
886
  }, {
774
- name: 'emojiResourceConfig',
775
- type: 'EmojiResourceConfig'
887
+ name: 'disableDisplayDropdown',
888
+ type: 'boolean',
889
+ description: 'Disable the view mode display dropdown'
776
890
  }, {
777
- name: 'enableSsrInlineScripts',
778
- type: 'boolean'
779
- }, {
780
- name: 'eventHandlers',
781
- type: 'EventHandlers'
782
- }, {
783
- name: 'extensionHandlers',
784
- type: 'ExtensionHandlers<any>'
785
- }, {
786
- name: 'extensionViewportSizes',
787
- type: 'ExtensionViewportSize[]'
788
- }, {
789
- name: 'fadeOutHeight',
790
- type: 'number'
791
- }, {
792
- name: 'featureFlags',
793
- type: '{ [featureFlag: string]: boolean; } | Partial<RawObjectFeatureFlags>',
794
- description: "@description\nShort lived feature flags for experiments and gradual rollouts\nFlags are expected to follow these rules or they are filtered out\n\n1. cased in kebab-case (match [a-z-])\n2. have boolean values or object {} values\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'my-feature': true }} />);\ngetFeatureFlags()?.myFeature === true;\n```\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'my-feature': 'thing' }} />);\ngetFeatureFlags()?.myFeature === undefined;\n```\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'product.my-feature': false }} />);\ngetFeatureFlags()?.myFeature === undefined;\ngetFeatureFlags()?.productMyFeature === undefined;\n```",
795
- defaultValue: 'undefined'
796
- }, {
797
- name: 'getExtensionHeight',
798
- type: '(node: PMNode) => string'
799
- }, {
800
- name: 'includeNodesCountInStats',
801
- type: 'boolean'
802
- }, {
803
- name: 'innerRef',
804
- type: 'React.RefObject<HTMLDivElement>'
805
- }, {
806
- name: 'isInsideOfInlineExtension',
807
- type: 'boolean'
808
- }, {
809
- name: 'isTopLevelRenderer',
810
- type: 'boolean'
811
- }, {
812
- name: 'maxHeight',
813
- type: 'number'
814
- }, {
815
- name: 'media',
816
- type: 'MediaOptions'
817
- }, {
818
- name: 'nodeComponents',
819
- type: '{ [key: string]: React.ComponentType<any>; }'
820
- }, {
821
- name: 'noOpSSRInlineScript',
822
- type: 'boolean'
823
- }, {
824
- name: 'onComplete',
825
- type: '(stat: RenderOutputStat) => void'
826
- }, {
827
- name: 'onError',
828
- type: '(error: any) => void'
829
- }, {
830
- name: 'onSetLinkTarget',
831
- type: '(url: string) => "_blank"',
832
- description: "Optional callback to programatically determine the link target for rendered links. Controls whether a link should render as external or not.\nReturn _blank if the url should render as an external link.\nReturn undefined to use the links default behavior and target.\n\n@param url - The URL of the link being rendered\n@returns '_blank' to render as an external link or undefined to not change the link"
833
- }, {
834
- name: 'portal',
835
- type: 'HTMLElement'
836
- }, {
837
- name: 'rendererContext',
838
- type: 'RendererContext'
839
- }, {
840
- name: 'schema',
841
- type: 'Schema<any, any>'
842
- }, {
843
- name: 'scrollToBlock',
844
- type: '(element: HTMLElement) => void',
845
- description: 'Optional callback to scroll an element into view when using block links (#block-xxx).\nWhen provided, this is used instead of the default scrollIntoView for accurate positioning\nin product-specific scroll containers (e.g. Confluence view page).'
846
- }, {
847
- name: 'shouldDisplayExtensionAsInline',
848
- type: '(extensionParams: ExtensionParams<Parameters>) => boolean',
849
- description: 'Determines if the extension should be displayed as inline based on the extension parameters.\n@param extensionParams - The extension parameters.\n@returns True if the extension should be displayed as inline, false otherwise.'
850
- }, {
851
- name: 'shouldOpenMediaViewer',
852
- type: 'boolean'
853
- }, {
854
- name: 'shouldRemoveEmptySpaceAroundContent',
855
- type: 'boolean'
856
- }, {
857
- name: 'smartLinks',
858
- type: 'SmartLinksOptions'
859
- }, {
860
- name: 'stickyHeaders',
861
- type: 'boolean | ({ show?: boolean; } & { offsetTop?: number; } & StickyHeaderConfig_DO_NOT_USE)'
862
- }, {
863
- name: 'textHighlighter',
864
- type: '{ component: React.ComponentType<{ children: React.ReactNode; groups: string[]; marks: Set<string>; match: string; startPos: number; }>; pattern: RegExp; }'
865
- }, {
866
- name: 'timeZone',
867
- type: 'string'
868
- }, {
869
- name: 'truncated',
870
- type: 'boolean'
871
- }, {
872
- name: 'UNSTABLE_allowTableAlignment',
873
- type: 'boolean'
874
- }, {
875
- name: 'UNSTABLE_allowTableResizing',
876
- type: 'boolean'
877
- }, {
878
- name: 'UNSTABLE_isPresentational',
879
- type: 'boolean',
880
- description: 'When true, elements may render without their default semantic roles\n(e.g., using role="presentation"), indicating that they are used solely for layout or styling purposes.\nElements currently affected: Tables.'
881
- }, {
882
- name: 'unsupportedContentLevelsTracking',
883
- type: '{ enabled: boolean; samplingRates?: { [key: string]: number; }; thresholds?: Partial<UnsupportedContentLevelThresholds>; }'
884
- }]
885
- }, {
886
- name: 'ConfluenceSearchConfigModal',
887
- package: '@atlaskit/link-datasource',
888
- description: 'Configuration modal for the Confluence search datasource. Lets users set up a "list of links" backed by a Confluence search query (space, query, sort) and produces Confluence search datasource ADF.',
889
- status: 'general-availability',
890
- usageGuidelines: ['Use when the user is configuring a Confluence search-based list of links (e.g. in a block or sidebar). On confirm, use the returned parameters to build datasource ADF or pass to DatasourceTableView.'],
891
- contentGuidelines: [],
892
- accessibilityGuidelines: ['Ensure the modal has an accessible title and focus is trapped; form fields (space, query, sort) must have labels and error messages announced.'],
893
- keywords: ['link-datasource', 'confluence', 'search', 'datasource', 'config', 'modal'],
894
- category: 'linking',
895
- examples: ["import React, { useState } from 'react';\nimport { IntlProvider } from 'react-intl';\nimport Button from '@atlaskit/button/standard-button';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport {\n\tdefaultInitialVisibleConfluenceColumnKeys,\n\tmockBasicFilterAGGFetchRequests,\n\tmockDatasourceFetchRequests,\n\tmockProductsData,\n\tmockSiteData,\n} from '@atlaskit/link-test-helpers/datasource';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { CONFLUENCE_SEARCH_DATASOURCE_ID } from '../../src/ui/confluence-search-modal';\nimport { ConfluenceSearchConfigModal } from '../../src/ui/confluence-search-modal/modal';\nimport { type ConfluenceSearchDatasourceParameters } from '../../src/ui/confluence-search-modal/types';\nmockDatasourceFetchRequests({\n\ttype: 'confluence',\n\tdelayedResponse: false,\n\tshouldMockORSBatch: true,\n\tavailableSitesOverride: mockSiteData.filter(\n\t\t(site) => !['test1', 'test2', 'test4'].includes(site.displayName),\n\t),\n\taccessibleProductsOverride: mockProductsData.filter((product) =>\n\t\t['confluence.ondemand'].includes(product.productId),\n\t),\n});\nmockBasicFilterAGGFetchRequests();\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [parameters] = useState<ConfluenceSearchDatasourceParameters>({\n\t\tcloudId: '67899',\n\t\tsearchString: 'Searched something',\n\t});\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(\n\t\tdefaultInitialVisibleConfluenceColumnKeys,\n\t);\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<IntlProvider locale=\"en\">\n\t\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\t\tToggle Modal\n\t\t\t\t</Button>\n\t\t\t\t{showModal && (\n\t\t\t\t\t<ConfluenceSearchConfigModal\n\t\t\t\t\t\tdatasourceId={CONFLUENCE_SEARCH_DATASOURCE_ID}\n\t\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\t\tparameters={parameters}\n\t\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SmartCardProvider>\n\t\t</IntlProvider>\n\t);\n};"],
896
- props: [{
897
- name: 'columnCustomSizes',
898
- type: 'ColumnSizesMap',
899
- description: 'Map of column key to custom column width'
900
- }, {
901
- name: 'datasourceId',
902
- type: 'string',
903
- description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
904
- isRequired: true
905
- }, {
906
- name: 'disableDisplayDropdown',
907
- type: 'boolean',
908
- description: 'Disable the view mode display dropdown'
909
- }, {
910
- name: 'disableSiteSelector',
911
- type: 'boolean'
912
- }, {
913
- name: 'onCancel',
914
- type: '() => void',
915
- description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
916
- isRequired: true
891
+ name: 'onCancel',
892
+ type: '() => void',
893
+ description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
894
+ isRequired: true
917
895
  }, {
918
896
  name: 'onInsert',
919
- type: '(adf: InlineCardAdf | ConfluenceSearchDatasourceAdf, analyticsEvent?: UIAnalyticsEvent) => void',
897
+ type: '(adf: InlineCardAdf | DatasourceAdf<Record<string, unknown>>, analyticsEvent?: UIAnalyticsEvent) => void',
920
898
  description: 'Callback function to be invoked when the insert issues button is clicked',
921
899
  isRequired: true
922
- }, {
923
- name: 'overrideParameters',
924
- type: '{ entityTypes?: string[]; }'
925
900
  }, {
926
901
  name: 'parameters',
927
- type: 'DatasourceParameters | ConfluenceSearchDatasourceParameters',
902
+ type: 'DatasourceParameters | JiraIssueDatasourceParameters',
928
903
  description: 'Parameters for making the data requests necessary to render data within the table'
929
904
  }, {
930
905
  name: 'shouldReturnFocus',
@@ -948,295 +923,320 @@ var atlaskitComponents = exports.atlaskitComponents = [{
948
923
  description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
949
924
  }]
950
925
  }, {
951
- name: 'JiraIssuesConfigModal',
952
- package: '@atlaskit/link-datasource',
953
- description: 'Configuration modal for the Jira issues datasource. Lets users set up a list of Jira issues (JQL, columns, filters) and produces Jira issues datasource ADF.',
926
+ name: 'LinkPicker',
927
+ package: '@atlaskit/link-picker',
928
+ description: 'Standalone link picker UI that lets users search and select links to insert. Supports plugins for different data sources (recents, search, Jira, Confluence, etc.) and can be used in modals, popups, or inline.',
954
929
  status: 'general-availability',
955
- usageGuidelines: ['Use when the user is configuring a Jira issues list (e.g. in a block or table). On confirm, use the returned parameters for datasource ADF or DatasourceTableView.'],
930
+ usageGuidelines: ['Use when the user needs to choose a link to insert (e.g. in an editor, form, or toolbar). Add plugins to define tabs and data sources; use SmartCardProvider above the picker so selected links resolve correctly.'],
956
931
  contentGuidelines: [],
957
- accessibilityGuidelines: ['Ensure the modal has an accessible title and focus management; JQL and column pickers must have clear labels and error announcements.'],
958
- keywords: ['link-datasource', 'jira', 'issues', 'datasource', 'config', 'modal', 'JQL'],
932
+ accessibilityGuidelines: ['Ensure the picker is focusable and has an accessible name (e.g. "Insert link"). Provide a keyboard-accessible way to open and close; ensure search and results are announced to screen readers.'],
933
+ keywords: ['link-picker', 'link', 'picker', 'search', 'insert link', 'plugins'],
959
934
  category: 'linking',
960
- examples: ["import React, { useState } from 'react';\nimport { IntlProvider } from 'react-intl';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport {\n\tdefaultInitialVisibleJiraColumnKeys,\n\tmockBasicFilterAGGFetchRequests,\n\tmockDatasourceFetchRequests,\n\tmockProductsData,\n\tmockSiteData,\n} from '@atlaskit/link-test-helpers/datasource';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { JIRA_LIST_OF_LINKS_DATASOURCE_ID, JiraIssuesConfigModal } from '../../src';\nmockDatasourceFetchRequests({\n\tdelayedResponse: false,\n\tshouldMockORSBatch: true,\n\tavailableSitesOverride: mockSiteData\n\t\t.map((site, index) => ({\n\t\t\t...site,\n\t\t\tcloudId: index === 0 ? 'doc-cloudId' : site.cloudId,\n\t\t}))\n\t\t.filter((site) => !['test1', 'test2', 'test4'].includes(site.displayName)),\n\taccessibleProductsOverride: mockProductsData\n\t\t.filter((product) => ['jira-servicedesk.ondemand'].includes(product.productId))\n\t\t.flatMap((product) => ({\n\t\t\t...product,\n\t\t\tworkspaces: product.workspaces?.map((workspace, index) => ({\n\t\t\t\t...workspace,\n\t\t\t\tcloudId: index === 0 ? 'doc-cloudId' : workspace.cloudId,\n\t\t\t})),\n\t\t})),\n});\nmockBasicFilterAGGFetchRequests({ withJiraFilterHydration: false });\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(defaultInitialVisibleJiraColumnKeys);\n\tconst [columnCustomSizes] = useState<{ [key: string]: number } | undefined>();\n\tconst [wrappedColumnKeys] = useState<string[] | undefined>();\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<IntlProvider locale=\"en\">\n\t\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\t\tToggle Modal\n\t\t\t\t</Button>\n\t\t\t\t{showModal && (\n\t\t\t\t\t<JiraIssuesConfigModal\n\t\t\t\t\t\tdatasourceId={JIRA_LIST_OF_LINKS_DATASOURCE_ID}\n\t\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\t\tcolumnCustomSizes={columnCustomSizes}\n\t\t\t\t\t\twrappedColumnKeys={wrappedColumnKeys}\n\t\t\t\t\t\tparameters={{ cloudId: 'doc-cloudId' }}\n\t\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SmartCardProvider>\n\t\t</IntlProvider>\n\t);\n};", "import { DatasourceTableView } from '@atlaskit/link-datasource';\nimport { ExampleJiraIssuesTableView } from '../examples-helpers/buildJiraIssuesTable';\nimport { FakeModalDialogContainer } from '../examples-helpers/fakeModalDialogContainer';\nexport default (): React.JSX.Element => {\n\treturn (\n\t\t<FakeModalDialogContainer>\n\t\t\t<ExampleJiraIssuesTableView DatasourceTable={DatasourceTableView} />\n\t\t</FakeModalDialogContainer>\n\t);\n};"],
935
+ examples: ["import React, { Fragment, type SyntheticEvent, useMemo, useState } from 'react';\nimport Link from '@atlaskit/link';\nimport { useSmartLinkLifecycleAnalytics } from '@atlaskit/link-analytics';\nimport { token } from '@atlaskit/tokens';\nimport { AtlassianLinkPickerPlugin, Scope } from '@atlassian/link-picker-atlassian-plugin';\nimport { mockEndpoints } from '@atlassian/recent-work-client/mocks';\nimport { PageWrapper } from '../example-helpers/common';\nimport { mockPluginEndpoints } from '../example-helpers/mock-plugin-endpoints';\nimport { MOCK_DATA_V3 as mockRecentData } from '../example-helpers/mock-recents-data';\nimport { LinkPicker, type LinkPickerProps } from '../src';\ntype OnSubmitPayload = Parameters<LinkPickerProps['onSubmit']>[0];\nmockPluginEndpoints();\nmockEndpoints(undefined, undefined, mockRecentData);\nfunction Basic() {\n\tconst [link, setLink] = useState<OnSubmitPayload>({\n\t\turl: '',\n\t\tdisplayText: null,\n\t\ttitle: null,\n\t\tmeta: {\n\t\t\tinputMethod: 'manual',\n\t\t},\n\t});\n\tconst linkAnalytics = useSmartLinkLifecycleAnalytics();\n\tconst handleSubmit: LinkPickerProps['onSubmit'] = (payload, analytic) => {\n\t\tsetLink(payload);\n\t\tlinkAnalytics.linkCreated(payload, analytic);\n\t};\n\tconst handleClick = (e: SyntheticEvent) => {\n\t\te.preventDefault();\n\t};\n\tconst plugins = useMemo(\n\t\t() => [\n\t\t\tnew AtlassianLinkPickerPlugin({\n\t\t\t\tcloudId: 'DUMMY-a5a01d21-1cc3-4f29-9565-f2bb8cd969f5',\n\t\t\t\tscope: Scope.ConfluenceContentType,\n\t\t\t\taggregatorUrl: 'https://pug.jira-dev.com/gateway/api/xpsearch-aggregator',\n\t\t\t\tactivityClientEndpoint: 'https://pug.jira-dev.com/gateway/api/graphql',\n\t\t\t}),\n\t\t],\n\t\t[],\n\t);\n\treturn (\n\t\t<Fragment>\n\t\t\t{\n\t\t\t<div style={{ paddingBottom: token('space.250') }}>\n\t\t\t\t<Link id=\"test-link\" href={link.url} target=\"_blank\" onClick={handleClick}>\n\t\t\t\t\t{link.displayText || link.url}\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t\t<LinkPicker\n\t\t\t\tplugins={plugins}\n\t\t\t\turl={link.url}\n\t\t\t\tdisplayText={link.displayText}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t/>\n\t\t</Fragment>\n\t);\n}\nexport default function BasicWrapper(): React.JSX.Element {\n\treturn (\n\t\t<PageWrapper>\n\t\t\t<Basic />\n\t\t</PageWrapper>\n\t);\n}", "import React, { Fragment, type SyntheticEvent, useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport Link from '@atlaskit/link';\nimport Popup from '@atlaskit/popup';\nimport { token } from '@atlaskit/tokens';\nimport { PageHeader, PageWrapper } from '../example-helpers/common';\nimport { LinkPicker } from '../src';\ntype OnSubmitPayload = Parameters<Required<React.ComponentProps<typeof LinkPicker>>['onSubmit']>[0];\nfunction WithoutPlugins() {\n\tconst [isOpen, setIsOpen] = useState(true);\n\tconst [link, setLink] = useState<OnSubmitPayload>({\n\t\turl: '',\n\t\tdisplayText: null,\n\t\ttitle: null,\n\t\tmeta: {\n\t\t\tinputMethod: 'manual',\n\t\t},\n\t});\n\tconst handleToggle = () => setIsOpen(!isOpen);\n\tconst handleSubmit = (payload: OnSubmitPayload) => {\n\t\tsetLink(payload);\n\t\tsetIsOpen(false);\n\t};\n\tconst handleClick = (e: SyntheticEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tsetIsOpen(true);\n\t};\n\tconst linkPickerInPopup = (\n\t\t<Popup\n\t\t\tisOpen={isOpen}\n\t\t\tautoFocus={false}\n\t\t\tonClose={handleToggle}\n\t\t\tcontent={({ update }) => (\n\t\t\t\t<LinkPicker\n\t\t\t\t\turl={link.url}\n\t\t\t\t\tdisplayText={link.displayText}\n\t\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\t\tonCancel={handleToggle}\n\t\t\t\t\tonContentResize={update}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tplacement=\"right-start\"\n\t\t\ttrigger={({ ref, ...triggerProps }) => (\n\t\t\t\t<Button\n\t\t\t\t\t{...triggerProps}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tappearance=\"primary\"\n\t\t\t\t\tisSelected={isOpen}\n\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t>\n\t\t\t\t\t{isOpen ? '-' : '+'}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t/>\n\t);\n\treturn (\n\t\t<Fragment>\n\t\t\t<PageHeader>\n\t\t\t\t<p>\n\t\t\t\t\t<b>LinkPicker</b> without search, used as an interface to submit a valid link with custom\n\t\t\t\t\tdisplay text.\n\t\t\t\t</p>\n\t\t\t</PageHeader>\n\t\t\t{\n\t\t\t<div style={{ paddingBottom: token('space.250') }}>\n\t\t\t\t<Link id=\"test-link\" href={link.url} target=\"_blank\" onClick={handleClick}>\n\t\t\t\t\t{link.displayText || link.url}\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t\t{linkPickerInPopup}\n\t\t</Fragment>\n\t);\n}\nexport default function WithoutPluginsWrapper(): React.JSX.Element {\n\treturn (\n\t\t<PageWrapper>\n\t\t\t<WithoutPlugins />\n\t\t</PageWrapper>\n\t);\n}"],
961
936
  props: [{
962
- name: 'columnCustomSizes',
963
- type: 'ColumnSizesMap',
964
- description: 'Map of column key to custom column width'
937
+ name: 'adaptiveHeight',
938
+ type: 'boolean',
939
+ description: 'Allows height of search results to adapt to the number of results being displayed.'
965
940
  }, {
966
- name: 'datasourceId',
967
- type: 'string',
968
- description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
969
- isRequired: true
941
+ name: 'additionalError',
942
+ type: 'string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal',
943
+ description: 'This prop passes one additional error that is secondary to component errors'
970
944
  }, {
971
- name: 'disableDisplayDropdown',
945
+ name: 'alwaysShowTabs',
972
946
  type: 'boolean',
973
- description: 'Disable the view mode display dropdown'
947
+ description: 'When true, tabs are displayed even if there is only one plugin.'
974
948
  }, {
975
- name: 'onCancel',
976
- type: '() => void',
977
- description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
978
- isRequired: true
949
+ name: 'component',
950
+ type: 'ComponentClass<Partial<LinkPickerProps> & { children: ReactElement<any, string | JSXElementConstructor<any>>; }, any> | FunctionComponent<...>',
951
+ description: 'Customise the link picker root component'
979
952
  }, {
980
- name: 'onInsert',
981
- type: '(adf: InlineCardAdf | DatasourceAdf<Record<string, unknown>>, analyticsEvent?: UIAnalyticsEvent) => void',
982
- description: 'Callback function to be invoked when the insert issues button is clicked',
983
- isRequired: true
953
+ name: 'customMessages',
954
+ type: '{ linkLabel?: MessageDescriptor; linkAriaLabel?: MessageDescriptor; linkPlaceholder?: MessageDescriptor; linkTextLabel?: MessageDescriptor; linkTextPlaceholder?: MessageDescriptor; linkHelperTextLabel?: MessageDescriptor; submitButtonLabel?: MessageDescriptor; }',
955
+ description: 'Allows for customisation of text in the link picker.'
984
956
  }, {
985
- name: 'parameters',
986
- type: 'DatasourceParameters | JiraIssueDatasourceParameters',
987
- description: 'Parameters for making the data requests necessary to render data within the table'
957
+ name: 'disableWidth',
958
+ type: 'boolean',
959
+ description: 'Disables the default width containing the link picker.'
988
960
  }, {
989
- name: 'shouldReturnFocus',
990
- type: 'boolean | React.RefObject<HTMLElement>',
991
- description: 'Set the focus to return to the element that had focus before focus lock was activated or pass through a specific ref element\nDefaults to false, meaning focus remains where it was when the FocusLock was deactivated'
961
+ name: 'displayHelperText',
962
+ type: 'string',
963
+ description: 'The desired text to be displayed below the display text input field. Only displayed when `platform-linking-visual-refresh-link-picker` gate is enabled.'
992
964
  }, {
993
- name: 'url',
965
+ name: 'displayText',
994
966
  type: 'string',
995
- description: 'The url that was used to insert a List of Links'
967
+ description: 'The desired text to be displayed alternatively to the title of the linked resource for editing.'
996
968
  }, {
997
- name: 'viewMode',
998
- type: '"table" | "inline"',
999
- description: "The view mode that the modal will show on open:\n- Table = Displays a list of links in table format\n- Inline = Presents a smart link that shows the count of query results. However, if there's only one result, it converts to an inline smart link of that issue."
969
+ name: 'featureFlags',
970
+ type: '{ [x: string]: unknown; }'
1000
971
  }, {
1001
- name: 'visibleColumnKeys',
1002
- type: 'string[]',
1003
- description: 'List of properties/column keys that are visible/selected'
972
+ name: 'hideDisplayText',
973
+ type: 'boolean',
974
+ description: 'Hides the link picker display text field if set to true.'
1004
975
  }, {
1005
- name: 'wrappedColumnKeys',
1006
- type: 'string[]',
1007
- description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
1008
- }]
1009
- }, {
1010
- name: 'AssetsConfigModal',
1011
- package: '@atlaskit/link-datasource',
1012
- description: 'Configuration modal for the Assets (object schema) datasource. Lets users set up a list of links from an Assets schema and produces Assets datasource ADF.',
1013
- status: 'general-availability',
1014
- usageGuidelines: ['Use when the user is configuring an Assets-based list of links. On confirm, use the returned parameters for datasource ADF or table view.'],
1015
- contentGuidelines: [],
1016
- accessibilityGuidelines: ['Ensure the modal has an accessible title and that schema/object pickers have clear labels.'],
1017
- keywords: ['link-datasource', 'assets', 'datasource', 'config', 'modal'],
1018
- category: 'linking',
1019
- examples: ["import React, { useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { mockAssetsClientFetchRequests } from '@atlaskit/link-test-helpers/assets';\nimport SmartLinkClient from '../../examples-helpers/smartLinkCustomClient';\nimport { ASSETS_LIST_OF_LINKS_DATASOURCE_ID, type AssetsDatasourceParameters } from '../../src';\nimport JSMAssetsConfigModal from '../../src/ui/assets-modal';\nmockAssetsClientFetchRequests({ delayedResponse: false });\nconst mockVisibleColumnKeys = [\n\t'Key',\n\t'Label',\n\t'Created',\n\t'Is Virtual',\n\t'Hardware Components',\n\t'Applications',\n\t'Software Services',\n\t'Number of Slots',\n\t'Primary Capability',\n\t'Owners',\n\t'Notes',\n];\nexport default (): React.JSX.Element => {\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [parameters] = useState<AssetsDatasourceParameters>({\n\t\taql: 'dummy aql',\n\t\tworkspaceId: '',\n\t\tschemaId: '1',\n\t});\n\tconst [visibleColumnKeys] = useState<string[] | undefined>(mockVisibleColumnKeys);\n\tconst toggleIsOpen = () => setShowModal((prevOpenState) => !prevOpenState);\n\tconst closeModal = () => setShowModal(false);\n\treturn (\n\t\t<SmartCardProvider client={new SmartLinkClient()}>\n\t\t\t<Button appearance=\"primary\" onClick={toggleIsOpen}>\n\t\t\t\tToggle Modal\n\t\t\t</Button>\n\t\t\t{showModal && (\n\t\t\t\t<JSMAssetsConfigModal\n\t\t\t\t\tdatasourceId={ASSETS_LIST_OF_LINKS_DATASOURCE_ID}\n\t\t\t\t\tvisibleColumnKeys={visibleColumnKeys}\n\t\t\t\t\tparameters={parameters}\n\t\t\t\t\tonCancel={closeModal}\n\t\t\t\t\tonInsert={closeModal}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</SmartCardProvider>\n\t);\n};"],
1020
- props: [{
1021
- name: 'columnCustomSizes',
1022
- type: 'ColumnSizesMap',
1023
- description: 'Map of column key to custom column width'
976
+ name: 'inputRef',
977
+ type: '((instance: HTMLInputElement) => void) | RefObject<HTMLInputElement>',
978
+ description: 'Ref to the link picker search input.'
1024
979
  }, {
1025
- name: 'datasourceId',
1026
- type: 'string',
1027
- description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
1028
- isRequired: true
980
+ name: 'isLoadingPlugins',
981
+ type: 'boolean',
982
+ description: 'If set true, Link picker will show the loading spinner where the tabs and results will show.'
1029
983
  }, {
1030
- name: 'disableDisplayDropdown',
984
+ name: 'isSubmitting',
1031
985
  type: 'boolean',
1032
- description: 'Disable the view mode display dropdown'
986
+ description: 'Controls showing a "submission in-progres" UX'
987
+ }, {
988
+ name: 'moveSubmitButton',
989
+ type: 'boolean',
990
+ description: 'This prop controls where the submit button appears. When true the submit button will move below the input field and be full width'
1033
991
  }, {
1034
992
  name: 'onCancel',
1035
993
  type: '() => void',
1036
- description: 'Callback function to be invoked when the modal is closed either via cancel button click, esc keydown, or modal blanket click',
1037
- isRequired: true
994
+ description: 'Callback to fire when the cancel button is clicked.\nIf not provided, cancel button is not displayed.'
1038
995
  }, {
1039
- name: 'onInsert',
1040
- type: '(adf: InlineCardAdf | AssetsDatasourceAdf, analyticsEvent?: UIAnalyticsEvent) => void',
1041
- description: 'Callback function to be invoked when the insert issues button is clicked',
996
+ name: 'onContentResize',
997
+ type: '() => void',
998
+ description: 'Callback to fire when content is changed inside the link picker e.g. items, when loading, tabs'
999
+ }, {
1000
+ name: 'onSubmit',
1001
+ type: '(arg: OnSubmitParameter, analytic?: UIAnalyticsEvent) => void',
1002
+ description: 'Callback to fire on form submission.',
1042
1003
  isRequired: true
1043
1004
  }, {
1044
- name: 'parameters',
1045
- type: 'DatasourceParameters | AssetsDatasourceParameters',
1046
- description: 'Parameters for making the data requests necessary to render data within the table'
1005
+ name: 'paddingBottom',
1006
+ type: 'string',
1007
+ description: 'Override the default bottom padding.'
1047
1008
  }, {
1048
- name: 'shouldReturnFocus',
1049
- type: 'boolean | React.RefObject<HTMLElement>',
1050
- description: 'Set the focus to return to the element that had focus before focus lock was activated or pass through a specific ref element\nDefaults to false, meaning focus remains where it was when the FocusLock was deactivated'
1009
+ name: 'paddingLeft',
1010
+ type: 'string',
1011
+ description: 'Override the default left padding.'
1051
1012
  }, {
1052
- name: 'url',
1013
+ name: 'paddingRight',
1053
1014
  type: 'string',
1054
- description: 'The url that was used to insert a List of Links'
1015
+ description: 'Override the default right padding.'
1055
1016
  }, {
1056
- name: 'viewMode',
1057
- type: '"table" | "inline"',
1058
- description: "The view mode that the modal will show on open:\n- Table = Displays a list of links in table format\n- Inline = Presents a smart link that shows the count of query results. However, if there's only one result, it converts to an inline smart link of that issue."
1017
+ name: 'paddingTop',
1018
+ type: 'string',
1019
+ description: 'Override the default top padding.'
1059
1020
  }, {
1060
- name: 'visibleColumnKeys',
1061
- type: 'string[]',
1062
- description: 'List of properties/column keys that are visible/selected'
1021
+ name: 'plugins',
1022
+ type: 'LinkPickerPlugin[]',
1023
+ description: 'Plugins that provide link suggestions / search capabilities.'
1063
1024
  }, {
1064
- name: 'wrappedColumnKeys',
1065
- type: 'string[]',
1066
- description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
1025
+ name: 'previewableLinksOnly',
1026
+ type: 'boolean',
1027
+ description: 'Disables URLs that do not have an embeddable preview'
1028
+ }, {
1029
+ name: 'recentSearchListSize',
1030
+ type: 'number',
1031
+ description: 'Showing dynamic list size based on window height'
1032
+ }, {
1033
+ name: 'shouldRenderNoResultsImage',
1034
+ type: 'boolean',
1035
+ description: 'Controls showing the image in the no results state'
1036
+ }, {
1037
+ name: 'submitOnInputChange',
1038
+ type: 'boolean',
1039
+ description: 'This prop disables submit button and handles submit on input change'
1040
+ }, {
1041
+ name: 'url',
1042
+ type: 'string',
1043
+ description: 'The url of the linked resource for editing.'
1067
1044
  }]
1068
1045
  }, {
1069
- name: 'DatasourceTableView',
1070
- package: '@atlaskit/link-datasource',
1071
- description: 'Table view component that renders a datasource (list of links) with configurable columns, sorting, and actions. Consumes datasource ADF or parameters and fetches data via the link client.',
1046
+ name: 'Renderer',
1047
+ package: '@atlaskit/renderer',
1048
+ description: 'Renderer component',
1072
1049
  status: 'general-availability',
1073
- usageGuidelines: ['Use when you need to display a list of links (Jira issues, Confluence search, Assets) in a table. Pass the datasource ADF or parameters; wrap in SmartCardProvider so resolution and actions work.'],
1050
+ usageGuidelines: ['Use ReactRenderer with an ADF document; use a transformer (e.g. BitbucketTransformer) with ADFEncoder when your storage format is not ADF.', 'Avoid unnecessary props changes: extract static objects to constants, avoid passing new objects or anonymous functions on every render, use useMemo/useCallback for props and callbacks to prevent performance degradation.', 'Ensure only one version of Renderer sub-dependencies (adf-schema, editor-common, prosemirror-model, etc.) in your bundles; use deduplication or resolutions. Use correct peer dependency versions.', 'Use the truncated prop with maxHeight/fadeOutHeight when you need to cap rendered content with a fade; add polyfills for fetch and ES6/ES7 when targeting older browsers.'],
1074
1051
  contentGuidelines: [],
1075
- accessibilityGuidelines: ['Ensure the table has a caption or aria-label; column headers and sort controls must be focusable and announced. Loading and error states should be announced.'],
1076
- keywords: ['link-datasource', 'table', 'datasource', 'list of links', 'view'],
1077
- category: 'linking',
1078
- examples: ["import { DatasourceTableView } from '@atlaskit/link-datasource';\nimport { ExampleJiraIssuesTableView } from '../examples-helpers/buildJiraIssuesTable';\nimport { FakeModalDialogContainer } from '../examples-helpers/fakeModalDialogContainer';\nexport default (): React.JSX.Element => {\n\treturn (\n\t\t<FakeModalDialogContainer>\n\t\t\t<ExampleJiraIssuesTableView DatasourceTable={DatasourceTableView} />\n\t\t</FakeModalDialogContainer>\n\t);\n};"],
1052
+ accessibilityGuidelines: [],
1053
+ keywords: ['editor', 'renderer', 'atlaskit'],
1054
+ category: 'editor',
1055
+ examples: ["import type { ChangeEvent } from 'react';\nimport RendererDemo from './helper/RendererDemo';\nimport { SmartCardProvider, CardClient } from '@atlaskit/link-provider';\nimport { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';\nimport type { ADFStage } from '@atlaskit/editor-common/validator';\nconst ADF_STAGE0 = 'stage0';\nconst ADF_FINAL = 'final';\nexport default function Example(): React.JSX.Element {\n\tconst [adfStage, setAdfStage] = React.useState<ADFStage>(ADF_FINAL);\n\tconst schema = getSchemaBasedOnStage(adfStage);\n\tconst onSchemaToggle = (event: ChangeEvent<HTMLInputElement>) => {\n\t\tsetAdfStage(event.currentTarget.checked ? ADF_STAGE0 : ADF_FINAL);\n\t};\n\tconst toggleCheckbox = (\n\t\t<label>\n\t\t\t{\n\t\t\t<input type=\"checkbox\" checked={adfStage === ADF_STAGE0} onChange={onSchemaToggle} />\n\t\t\tUse stage0 (experimental) document schema\n\t\t</label>\n\t);\n\treturn (\n\t\t<SmartCardProvider client={new CardClient('staging')}>\n\t\t\t<RendererDemo\n\t\t\t\tallowColumnSorting\n\t\t\t\tallowSelectAllTrap\n\t\t\t\tallowWrapCodeBlock\n\t\t\t\tallowCopyToClipboard\n\t\t\t\tserializer=\"react\"\n\t\t\t\tadfStage={adfStage}\n\t\t\t\tschema={schema}\n\t\t\t\tactionButtons={toggleCheckbox}\n\t\t\t\twithProviders\n\t\t\t/>\n\t\t</SmartCardProvider>\n\t);\n}", 'import RendererDemo from \'./helper/RendererDemo\';\nimport {\n\tNORMAL_SEVERITY_THRESHOLD,\n\tDEGRADED_SEVERITY_THRESHOLD,\n} from \'../../renderer/src/ui/Renderer\';\nexport default function Example(): React.JSX.Element {\n\treturn (\n\t\t<RendererDemo\n\t\t\tappearance="full-page"\n\t\t\tserializer="react"\n\t\t\tallowHeadingAnchorLinks\n\t\t\tallowColumnSorting={true}\n\t\t\tallowCopyToClipboard\n\t\t\tallowWrapCodeBlock\n\t\t\tUNSTABLE_allowTableAlignment\n\t\t\tUNSTABLE_allowTableResizing\n\t\t\tanalyticsEventSeverityTracking={{\n\t\t\t\tenabled: true,\n\t\t\t\tseverityNormalThreshold: NORMAL_SEVERITY_THRESHOLD,\n\t\t\t\tseverityDegradedThreshold: DEGRADED_SEVERITY_THRESHOLD,\n\t\t\t}}\n\t\t/>\n\t);\n}', 'import RendererDemo from \'./helper/RendererDemo\';\nexport default function Example(): React.JSX.Element {\n\treturn <RendererDemo withProviders={true} serializer="react" />;\n}'],
1079
1056
  props: [{
1080
- name: 'columnCustomSizes',
1081
- type: 'ColumnSizesMap',
1082
- description: 'Map of column key to custom column width'
1057
+ name: 'addTelepointer',
1058
+ type: 'boolean',
1059
+ description: 'When enabled a trailing telepointer will be added to the rendered document\nfollowing content updates.\n\nContent is updated by passing a new value prop to the renderer.\n\nThe trailing pointer is updated by dom injection to the last text node which\nis updated as a result of a content update.'
1083
1060
  }, {
1084
- name: 'datasourceId',
1085
- type: 'string',
1086
- description: 'Unique identifier for which type of datasource is being rendered and for making its requests',
1087
- isRequired: true
1061
+ name: 'adfStage',
1062
+ type: '"final" | "stage0"'
1088
1063
  }, {
1089
- name: 'onColumnResize',
1090
- type: '(key: string, width: number) => void'
1064
+ name: 'allowAltTextOnImages',
1065
+ type: 'boolean'
1091
1066
  }, {
1092
- name: 'onVisibleColumnKeysChange',
1093
- type: '(visibleColumnKeys: string[]) => void',
1094
- description: 'Callback to be invoked whenever a user changes the visible columns in a datasource table\neither by selecting/unselecting or reordering (drag and drop)\n\n@param visibleColumnKeys the array of keys for all of the selected columns'
1067
+ name: 'allowAnnotations',
1068
+ type: 'boolean'
1095
1069
  }, {
1096
- name: 'onWrappedColumnChange',
1097
- type: '(key: string, shouldWrap: boolean) => void',
1098
- description: 'Callback to be invoked whenever user changes wrap attribute of the column.\n\n@param key Column key\n@param shouldWrap Whenever column should wrap'
1070
+ name: 'allowColumnSorting',
1071
+ type: 'boolean'
1099
1072
  }, {
1100
- name: 'parameters',
1101
- type: 'DatasourceParameters',
1102
- description: 'Parameters for making the data requests necessary to render data within the table',
1103
- isRequired: true
1073
+ name: 'allowCopyToClipboard',
1074
+ type: 'boolean'
1104
1075
  }, {
1105
- name: 'scrollableContainerHeight',
1106
- type: 'number',
1107
- description: 'If this number is set it will restrict (max-height) maximum size of the component AND make main container a scrollable container.\nIt this number is 0 it will not restrict height and not make container scrollable.'
1076
+ name: 'allowCustomPanels',
1077
+ type: 'boolean'
1108
1078
  }, {
1109
- name: 'url',
1110
- type: 'string',
1111
- description: 'Url for an existing datasource, initially used for displaying to a user unauthorized to query that site'
1079
+ name: 'allowFixedColumnWidthOption',
1080
+ type: 'boolean'
1112
1081
  }, {
1113
- name: 'visibleColumnKeys',
1114
- type: 'string[]',
1115
- description: 'List of properties/column keys that are visible/selected'
1082
+ name: 'allowHeadingAnchorLinks',
1083
+ type: 'boolean | HeadingAnchorLinksConfig'
1116
1084
  }, {
1117
- name: 'wrappedColumnKeys',
1118
- type: 'string[]',
1119
- description: 'List of column keys that needs to be shown without truncation (content will wrap to a new line)'
1120
- }]
1121
- }, {
1122
- name: 'LinkPicker',
1123
- package: '@atlaskit/link-picker',
1124
- description: 'Standalone link picker UI that lets users search and select links to insert. Supports plugins for different data sources (recents, search, Jira, Confluence, etc.) and can be used in modals, popups, or inline.',
1125
- status: 'general-availability',
1126
- usageGuidelines: ['Use when the user needs to choose a link to insert (e.g. in an editor, form, or toolbar). Add plugins to define tabs and data sources; use SmartCardProvider above the picker so selected links resolve correctly.'],
1127
- contentGuidelines: [],
1128
- accessibilityGuidelines: ['Ensure the picker is focusable and has an accessible name (e.g. "Insert link"). Provide a keyboard-accessible way to open and close; ensure search and results are announced to screen readers.'],
1129
- keywords: ['link-picker', 'link', 'picker', 'search', 'insert link', 'plugins'],
1130
- category: 'linking',
1131
- examples: ["import React, { Fragment, type SyntheticEvent, useMemo, useState } from 'react';\nimport Link from '@atlaskit/link';\nimport { useSmartLinkLifecycleAnalytics } from '@atlaskit/link-analytics';\nimport { token } from '@atlaskit/tokens';\nimport { AtlassianLinkPickerPlugin, Scope } from '@atlassian/link-picker-atlassian-plugin';\nimport { mockEndpoints } from '@atlassian/recent-work-client/mocks';\nimport { PageWrapper } from '../example-helpers/common';\nimport { mockPluginEndpoints } from '../example-helpers/mock-plugin-endpoints';\nimport { MOCK_DATA_V3 as mockRecentData } from '../example-helpers/mock-recents-data';\nimport { LinkPicker, type LinkPickerProps } from '../src';\ntype OnSubmitPayload = Parameters<LinkPickerProps['onSubmit']>[0];\nmockPluginEndpoints();\nmockEndpoints(undefined, undefined, mockRecentData);\nfunction Basic() {\n\tconst [link, setLink] = useState<OnSubmitPayload>({\n\t\turl: '',\n\t\tdisplayText: null,\n\t\ttitle: null,\n\t\tmeta: {\n\t\t\tinputMethod: 'manual',\n\t\t},\n\t});\n\tconst linkAnalytics = useSmartLinkLifecycleAnalytics();\n\tconst handleSubmit: LinkPickerProps['onSubmit'] = (payload, analytic) => {\n\t\tsetLink(payload);\n\t\tlinkAnalytics.linkCreated(payload, analytic);\n\t};\n\tconst handleClick = (e: SyntheticEvent) => {\n\t\te.preventDefault();\n\t};\n\tconst plugins = useMemo(\n\t\t() => [\n\t\t\tnew AtlassianLinkPickerPlugin({\n\t\t\t\tcloudId: 'DUMMY-a5a01d21-1cc3-4f29-9565-f2bb8cd969f5',\n\t\t\t\tscope: Scope.ConfluenceContentType,\n\t\t\t\taggregatorUrl: 'https://pug.jira-dev.com/gateway/api/xpsearch-aggregator',\n\t\t\t\tactivityClientEndpoint: 'https://pug.jira-dev.com/gateway/api/graphql',\n\t\t\t}),\n\t\t],\n\t\t[],\n\t);\n\treturn (\n\t\t<Fragment>\n\t\t\t{\n\t\t\t<div style={{ paddingBottom: token('space.250') }}>\n\t\t\t\t<Link id=\"test-link\" href={link.url} target=\"_blank\" onClick={handleClick}>\n\t\t\t\t\t{link.displayText || link.url}\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t\t<LinkPicker\n\t\t\t\tplugins={plugins}\n\t\t\t\turl={link.url}\n\t\t\t\tdisplayText={link.displayText}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t/>\n\t\t</Fragment>\n\t);\n}\nexport default function BasicWrapper(): React.JSX.Element {\n\treturn (\n\t\t<PageWrapper>\n\t\t\t<Basic />\n\t\t</PageWrapper>\n\t);\n}", "import React, { Fragment, type SyntheticEvent, useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport Link from '@atlaskit/link';\nimport Popup from '@atlaskit/popup';\nimport { token } from '@atlaskit/tokens';\nimport { PageHeader, PageWrapper } from '../example-helpers/common';\nimport { LinkPicker } from '../src';\ntype OnSubmitPayload = Parameters<Required<React.ComponentProps<typeof LinkPicker>>['onSubmit']>[0];\nfunction WithoutPlugins() {\n\tconst [isOpen, setIsOpen] = useState(true);\n\tconst [link, setLink] = useState<OnSubmitPayload>({\n\t\turl: '',\n\t\tdisplayText: null,\n\t\ttitle: null,\n\t\tmeta: {\n\t\t\tinputMethod: 'manual',\n\t\t},\n\t});\n\tconst handleToggle = () => setIsOpen(!isOpen);\n\tconst handleSubmit = (payload: OnSubmitPayload) => {\n\t\tsetLink(payload);\n\t\tsetIsOpen(false);\n\t};\n\tconst handleClick = (e: SyntheticEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tsetIsOpen(true);\n\t};\n\tconst linkPickerInPopup = (\n\t\t<Popup\n\t\t\tisOpen={isOpen}\n\t\t\tautoFocus={false}\n\t\t\tonClose={handleToggle}\n\t\t\tcontent={({ update }) => (\n\t\t\t\t<LinkPicker\n\t\t\t\t\turl={link.url}\n\t\t\t\t\tdisplayText={link.displayText}\n\t\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\t\tonCancel={handleToggle}\n\t\t\t\t\tonContentResize={update}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\tplacement=\"right-start\"\n\t\t\ttrigger={({ ref, ...triggerProps }) => (\n\t\t\t\t<Button\n\t\t\t\t\t{...triggerProps}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tappearance=\"primary\"\n\t\t\t\t\tisSelected={isOpen}\n\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t>\n\t\t\t\t\t{isOpen ? '-' : '+'}\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t/>\n\t);\n\treturn (\n\t\t<Fragment>\n\t\t\t<PageHeader>\n\t\t\t\t<p>\n\t\t\t\t\t<b>LinkPicker</b> without search, used as an interface to submit a valid link with custom\n\t\t\t\t\tdisplay text.\n\t\t\t\t</p>\n\t\t\t</PageHeader>\n\t\t\t{\n\t\t\t<div style={{ paddingBottom: token('space.250') }}>\n\t\t\t\t<Link id=\"test-link\" href={link.url} target=\"_blank\" onClick={handleClick}>\n\t\t\t\t\t{link.displayText || link.url}\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t\t{linkPickerInPopup}\n\t\t</Fragment>\n\t);\n}\nexport default function WithoutPluginsWrapper(): React.JSX.Element {\n\treturn (\n\t\t<PageWrapper>\n\t\t\t<WithoutPlugins />\n\t\t</PageWrapper>\n\t);\n}"],
1132
- props: [{
1133
- name: 'adaptiveHeight',
1134
- type: 'boolean',
1135
- description: 'Allows height of search results to adapt to the number of results being displayed.'
1085
+ name: 'allowPlaceholderText',
1086
+ type: 'boolean'
1136
1087
  }, {
1137
- name: 'additionalError',
1138
- type: 'string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal',
1139
- description: 'This prop passes one additional error that is secondary to component errors'
1088
+ name: 'allowRendererContainerStyles',
1089
+ type: 'boolean'
1140
1090
  }, {
1141
- name: 'alwaysShowTabs',
1091
+ name: 'allowSelectAllTrap',
1092
+ type: 'boolean'
1093
+ }, {
1094
+ name: 'allowUgcScrubber',
1095
+ type: 'boolean'
1096
+ }, {
1097
+ name: 'allowWrapCodeBlock',
1098
+ type: 'boolean'
1099
+ }, {
1100
+ name: 'analyticsEventSeverityTracking',
1101
+ type: '{ enabled: boolean; severityDegradedThreshold: number; severityNormalThreshold: number; }'
1102
+ }, {
1103
+ name: 'annotationProvider',
1104
+ type: '{ annotationManager?: AnnotationManager; inlineComment: InlineCommentAnnotationProvider; }'
1105
+ }, {
1106
+ name: 'appearance',
1107
+ type: '"comment" | "full-page" | "full-width" | "max"'
1108
+ }, {
1109
+ name: 'createSerializer',
1110
+ type: '(init: ReactSerializerInit) => Serializer<JSX.Element>',
1111
+ description: 'Creates a new `Serializer` to transform the ADF `document` into `JSX.Element`.\nAllows Confluence to implement {@link https://hello.atlassian.net/wiki/spaces/~lmarinov/pages/5177285037/COMPLEXIT+Progressive+rendering+of+ADF progressive rendering}.'
1112
+ }, {
1113
+ name: 'dataProviders',
1114
+ type: 'ProviderFactory'
1115
+ }, {
1116
+ name: 'disableActions',
1117
+ type: 'boolean'
1118
+ }, {
1119
+ name: 'disableHeadingIDs',
1120
+ type: 'boolean'
1121
+ }, {
1122
+ name: 'disableTableOverflowShadow',
1142
1123
  type: 'boolean',
1143
- description: 'When true, tabs are displayed even if there is only one plugin.'
1124
+ description: 'When true, disables the overflow shadow (visual indication) on the edges\nof tables.'
1144
1125
  }, {
1145
- name: 'component',
1146
- type: 'ComponentClass<Partial<LinkPickerProps> & { children: ReactElement<any, string | JSXElementConstructor<any>>; }, any> | FunctionComponent<...>',
1147
- description: 'Customise the link picker root component'
1126
+ name: 'document',
1127
+ type: 'DocNode',
1128
+ isRequired: true
1129
+ }, {
1130
+ name: 'emojiResourceConfig',
1131
+ type: 'EmojiResourceConfig'
1132
+ }, {
1133
+ name: 'enableSsrInlineScripts',
1134
+ type: 'boolean'
1135
+ }, {
1136
+ name: 'eventHandlers',
1137
+ type: 'EventHandlers'
1138
+ }, {
1139
+ name: 'extensionHandlers',
1140
+ type: 'ExtensionHandlers<any>'
1141
+ }, {
1142
+ name: 'extensionViewportSizes',
1143
+ type: 'ExtensionViewportSize[]'
1144
+ }, {
1145
+ name: 'fadeOutHeight',
1146
+ type: 'number'
1147
+ }, {
1148
+ name: 'featureFlags',
1149
+ type: '{ [featureFlag: string]: boolean; } | Partial<RawObjectFeatureFlags>',
1150
+ description: "@description\nShort lived feature flags for experiments and gradual rollouts\nFlags are expected to follow these rules or they are filtered out\n\n1. cased in kebab-case (match [a-z-])\n2. have boolean values or object {} values\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'my-feature': true }} />);\ngetFeatureFlags()?.myFeature === true;\n```\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'my-feature': 'thing' }} />);\ngetFeatureFlags()?.myFeature === undefined;\n```\n\n@example\n```tsx\n(<Renderer featureFlags={{ 'product.my-feature': false }} />);\ngetFeatureFlags()?.myFeature === undefined;\ngetFeatureFlags()?.productMyFeature === undefined;\n```",
1151
+ defaultValue: 'undefined'
1152
+ }, {
1153
+ name: 'getExtensionHeight',
1154
+ type: '(node: PMNode) => string'
1155
+ }, {
1156
+ name: 'includeNodesCountInStats',
1157
+ type: 'boolean'
1158
+ }, {
1159
+ name: 'innerRef',
1160
+ type: 'React.RefObject<HTMLDivElement>'
1161
+ }, {
1162
+ name: 'isInsideOfInlineExtension',
1163
+ type: 'boolean'
1148
1164
  }, {
1149
- name: 'customMessages',
1150
- type: '{ linkLabel?: MessageDescriptor; linkAriaLabel?: MessageDescriptor; linkPlaceholder?: MessageDescriptor; linkTextLabel?: MessageDescriptor; linkTextPlaceholder?: MessageDescriptor; linkHelperTextLabel?: MessageDescriptor; submitButtonLabel?: MessageDescriptor; }',
1151
- description: 'Allows for customisation of text in the link picker.'
1165
+ name: 'isTopLevelRenderer',
1166
+ type: 'boolean'
1152
1167
  }, {
1153
- name: 'disableWidth',
1154
- type: 'boolean',
1155
- description: 'Disables the default width containing the link picker.'
1168
+ name: 'maxHeight',
1169
+ type: 'number'
1156
1170
  }, {
1157
- name: 'displayHelperText',
1158
- type: 'string',
1159
- description: 'The desired text to be displayed below the display text input field. Only displayed when `platform-linking-visual-refresh-link-picker` gate is enabled.'
1171
+ name: 'media',
1172
+ type: 'MediaOptions'
1160
1173
  }, {
1161
- name: 'displayText',
1162
- type: 'string',
1163
- description: 'The desired text to be displayed alternatively to the title of the linked resource for editing.'
1174
+ name: 'nodeComponents',
1175
+ type: '{ [key: string]: React.ComponentType<any>; }'
1164
1176
  }, {
1165
- name: 'featureFlags',
1166
- type: '{ [x: string]: unknown; }'
1177
+ name: 'noOpSSRInlineScript',
1178
+ type: 'boolean'
1167
1179
  }, {
1168
- name: 'hideDisplayText',
1169
- type: 'boolean',
1170
- description: 'Hides the link picker display text field if set to true.'
1180
+ name: 'onComplete',
1181
+ type: '(stat: RenderOutputStat) => void'
1171
1182
  }, {
1172
- name: 'inputRef',
1173
- type: '((instance: HTMLInputElement) => void) | RefObject<HTMLInputElement>',
1174
- description: 'Ref to the link picker search input.'
1183
+ name: 'onError',
1184
+ type: '(error: any) => void'
1175
1185
  }, {
1176
- name: 'isLoadingPlugins',
1177
- type: 'boolean',
1178
- description: 'If set true, Link picker will show the loading spinner where the tabs and results will show.'
1186
+ name: 'onSetLinkTarget',
1187
+ type: '(url: string) => "_blank"',
1188
+ description: "Optional callback to programatically determine the link target for rendered links. Controls whether a link should render as external or not.\nReturn _blank if the url should render as an external link.\nReturn undefined to use the links default behavior and target.\n\n@param url - The URL of the link being rendered\n@returns '_blank' to render as an external link or undefined to not change the link"
1179
1189
  }, {
1180
- name: 'isSubmitting',
1181
- type: 'boolean',
1182
- description: 'Controls showing a "submission in-progres" UX'
1190
+ name: 'portal',
1191
+ type: 'HTMLElement'
1183
1192
  }, {
1184
- name: 'moveSubmitButton',
1185
- type: 'boolean',
1186
- description: 'This prop controls where the submit button appears. When true the submit button will move below the input field and be full width'
1193
+ name: 'rendererContext',
1194
+ type: 'RendererContext'
1187
1195
  }, {
1188
- name: 'onCancel',
1189
- type: '() => void',
1190
- description: 'Callback to fire when the cancel button is clicked.\nIf not provided, cancel button is not displayed.'
1196
+ name: 'schema',
1197
+ type: 'Schema<any, any>'
1191
1198
  }, {
1192
- name: 'onContentResize',
1193
- type: '() => void',
1194
- description: 'Callback to fire when content is changed inside the link picker e.g. items, when loading, tabs'
1199
+ name: 'scrollToBlock',
1200
+ type: '(element: HTMLElement) => void',
1201
+ description: 'Optional callback to scroll an element into view when using block links (#block-xxx).\nWhen provided, this is used instead of the default scrollIntoView for accurate positioning\nin product-specific scroll containers (e.g. Confluence view page).'
1195
1202
  }, {
1196
- name: 'onSubmit',
1197
- type: '(arg: OnSubmitParameter, analytic?: UIAnalyticsEvent) => void',
1198
- description: 'Callback to fire on form submission.',
1199
- isRequired: true
1203
+ name: 'shouldDisplayExtensionAsInline',
1204
+ type: '(extensionParams: ExtensionParams<Parameters>) => boolean',
1205
+ description: 'Determines if the extension should be displayed as inline based on the extension parameters.\n@param extensionParams - The extension parameters.\n@returns True if the extension should be displayed as inline, false otherwise.'
1200
1206
  }, {
1201
- name: 'paddingBottom',
1202
- type: 'string',
1203
- description: 'Override the default bottom padding.'
1207
+ name: 'shouldOpenMediaViewer',
1208
+ type: 'boolean'
1204
1209
  }, {
1205
- name: 'paddingLeft',
1206
- type: 'string',
1207
- description: 'Override the default left padding.'
1210
+ name: 'shouldRemoveEmptySpaceAroundContent',
1211
+ type: 'boolean'
1208
1212
  }, {
1209
- name: 'paddingRight',
1210
- type: 'string',
1211
- description: 'Override the default right padding.'
1213
+ name: 'smartLinks',
1214
+ type: 'SmartLinksOptions'
1212
1215
  }, {
1213
- name: 'paddingTop',
1214
- type: 'string',
1215
- description: 'Override the default top padding.'
1216
+ name: 'stickyHeaders',
1217
+ type: 'boolean | ({ show?: boolean; } & { offsetTop?: number; } & StickyHeaderConfig_DO_NOT_USE)'
1216
1218
  }, {
1217
- name: 'plugins',
1218
- type: 'LinkPickerPlugin[]',
1219
- description: 'Plugins that provide link suggestions / search capabilities.'
1219
+ name: 'textHighlighter',
1220
+ type: '{ component: React.ComponentType<{ children: React.ReactNode; groups: string[]; marks: Set<string>; match: string; startPos: number; }>; pattern: RegExp; }'
1220
1221
  }, {
1221
- name: 'previewableLinksOnly',
1222
- type: 'boolean',
1223
- description: 'Disables URLs that do not have an embeddable preview'
1222
+ name: 'timeZone',
1223
+ type: 'string'
1224
1224
  }, {
1225
- name: 'recentSearchListSize',
1226
- type: 'number',
1227
- description: 'Showing dynamic list size based on window height'
1225
+ name: 'truncated',
1226
+ type: 'boolean'
1228
1227
  }, {
1229
- name: 'shouldRenderNoResultsImage',
1230
- type: 'boolean',
1231
- description: 'Controls showing the image in the no results state'
1228
+ name: 'UNSTABLE_allowTableAlignment',
1229
+ type: 'boolean'
1232
1230
  }, {
1233
- name: 'submitOnInputChange',
1231
+ name: 'UNSTABLE_allowTableResizing',
1232
+ type: 'boolean'
1233
+ }, {
1234
+ name: 'UNSTABLE_isPresentational',
1234
1235
  type: 'boolean',
1235
- description: 'This prop disables submit button and handles submit on input change'
1236
+ description: 'When true, elements may render without their default semantic roles\n(e.g., using role="presentation"), indicating that they are used solely for layout or styling purposes.\nElements currently affected: Tables.'
1236
1237
  }, {
1237
- name: 'url',
1238
- type: 'string',
1239
- description: 'The url of the linked resource for editing.'
1238
+ name: 'unsupportedContentLevelsTracking',
1239
+ type: '{ enabled: boolean; samplingRates?: { [key: string]: number; }; thresholds?: Partial<UnsupportedContentLevelThresholds>; }'
1240
1240
  }]
1241
1241
  }, {
1242
1242
  name: 'Card',
@@ -1357,97 +1357,147 @@ var atlaskitComponents = exports.atlaskitComponents = [{
1357
1357
  description: 'The url link of the resource to be resolved and shown as Smart Link.'
1358
1358
  }]
1359
1359
  }, {
1360
- name: 'HoverCard',
1360
+ name: 'FooterBlock',
1361
1361
  package: '@atlaskit/smart-card',
1362
- description: 'Hover cards can be used as a standalone component to wrap any React component and display information about a supplied URL when the user hovers over the child. Different actions are shown depending on the resource type.',
1362
+ description: 'A block component for the Smart Link footer, typically showing actions (e.g. copy, open, follow).',
1363
1363
  status: 'general-availability',
1364
- usageGuidelines: ['Use when you need a Smart Link preview on hover over a custom trigger (e.g. text, icon). For hover preview on inline Smart Links in body text, use Card with showHoverPreview instead.'],
1364
+ usageGuidelines: ['Use at the bottom of a FlexibleCard when you need actions such as copy link, open, or follow.'],
1365
1365
  contentGuidelines: [],
1366
- accessibilityGuidelines: ['Provide a keyboard-accessible way to open the preview (e.g. focus or explicit trigger); do not rely on hover alone.', 'Ensure the trigger element has an accessible name and role (e.g. link or button).', 'Ensure the hover card content is announced when shown (e.g. aria-describedby or live region) and can be dismissed via keyboard.'],
1367
- keywords: ['smart-card', 'hover card', 'hover', 'preview', 'smart link'],
1366
+ accessibilityGuidelines: ['Give each action button or control an accessible name (e.g. "Copy link", "Open in new tab") so purpose is clear to screen readers.', 'Ensure actions are keyboard operable and appear in a logical tab order.'],
1367
+ keywords: ['smart-card', 'footer block', 'flexible', 'block', 'actions'],
1368
1368
  category: 'linking',
1369
- examples: ["import { IntlProvider } from 'react-intl';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { ResolvedClient, ResolvedClientEmbedUrl } from '@atlaskit/link-test-helpers';\nimport { HoverCard } from '../../src/hoverCard';\nimport HoverOverMe from '../utils/hover-card-box';\nexport default (): React.JSX.Element => (\n\t<IntlProvider locale=\"en\">\n\t\t<SmartCardProvider client={new ResolvedClient('stg')}>\n\t\t\t<HoverCard url={ResolvedClientEmbedUrl}>\n\t\t\t\t<HoverOverMe />\n\t\t\t</HoverCard>\n\t\t</SmartCardProvider>\n\t</IntlProvider>\n);"],
1369
+ examples: ["import { FooterBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<FooterBlock />\n\t</ExampleContainer>\n);"],
1370
1370
  props: [{
1371
- name: 'actionOptions',
1372
- type: 'CardActionVisibilityOptions & { previewAction?: { hideBlanket?: boolean; size?: EmbedModalSize; }; rovoChatAction?: { optIn: boolean; }; }',
1373
- description: 'Configure visibility of server and client actions'
1371
+ name: 'actions',
1372
+ type: 'ActionItem[]',
1373
+ description: 'An array of actions to be displayed on the right.\nAdding more than three actions will result in the second and following\nactions being hidden inside of a dropdown\n@see ActionItem'
1374
1374
  }, {
1375
- name: 'allowEventPropagation',
1375
+ name: 'alwaysShow',
1376
1376
  type: 'boolean',
1377
- description: 'Allow click event to bubble up from hover preview trigger component.'
1377
+ description: 'Allows rendering of the footer regardless of whether the block has resolved'
1378
1378
  }, {
1379
- name: 'canOpen',
1380
- type: 'boolean',
1381
- description: 'Determines if the hover card is allowed to open. If changed from true to false while the\nhover card is open, the hover card will be closed.'
1379
+ name: 'blockRef',
1380
+ type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1381
+ description: 'Ref to block wrapper div.'
1382
1382
  }, {
1383
1383
  name: 'children',
1384
- type: 'React.ReactElement<any, string | React.JSXElementConstructor<any>>',
1385
- description: 'React children component over which the hover card can be triggered.',
1386
- isRequired: true
1384
+ type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1385
+ description: 'React children'
1387
1386
  }, {
1388
- name: 'closeOnChildClick',
1387
+ name: 'hideIconLoadingSkeleton',
1389
1388
  type: 'boolean',
1390
- description: 'Determines if the hover card should close when the children passed in are\nclicked.'
1389
+ description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1391
1390
  }, {
1392
- name: 'hoverPreviewOptions',
1393
- type: 'HoverPreviewOptions',
1394
- description: 'Additional configurations for hover card.'
1391
+ name: 'hideProvider',
1392
+ type: 'boolean',
1393
+ description: 'Allows hiding of the resources provider'
1395
1394
  }, {
1396
- name: 'id',
1397
- type: 'string',
1398
- description: 'Unique ID for a hover card. Used for analytics.'
1395
+ name: 'isPreviewBlockErrored',
1396
+ type: 'boolean',
1397
+ description: 'Used with RovoActions to determine if the preview block is visible or not'
1399
1398
  }, {
1400
- name: 'label',
1399
+ name: 'onActionMenuOpenChange',
1400
+ type: '(options: OnActionMenuOpenChangeOptions) => void',
1401
+ description: 'Function to be called when footer action dropdown open state is changed.'
1402
+ }, {
1403
+ name: 'placeholderId',
1401
1404
  type: 'string',
1402
- description: 'Refers to an `aria-label` attribute. Sets an accessible name for the hover card to announce it to users of assistive technology.\nUsage of either this, or the `titleId` attribute is strongly recommended.'
1405
+ description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1403
1406
  }, {
1404
- name: 'onVisibilityChange',
1405
- type: '(isVisible: boolean) => void',
1406
- description: 'Callback function that is called when the hover card is visible or hidden.'
1407
+ name: 'size',
1408
+ type: 'SmartLinkSize',
1409
+ description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1410
+ }]
1411
+ }, {
1412
+ name: 'MetadataBlock',
1413
+ package: '@atlaskit/smart-card',
1414
+ description: 'A block component that displays a row of metadata elements (e.g. created by, due date, state) in a Smart Link.',
1415
+ status: 'general-availability',
1416
+ usageGuidelines: ['Use when you need a single row of metadata (e.g. created by, due date, state) in a block Smart Link.'],
1417
+ contentGuidelines: [],
1418
+ accessibilityGuidelines: ['Ensure metadata is available to screen readers (e.g. not conveyed only by color or icon).', 'Use a list or group with an accessible name if the metadata row has a specific purpose (e.g. "Contributors", "Dates").'],
1419
+ keywords: ['smart-card', 'metadata block', 'flexible', 'block', 'metadata'],
1420
+ category: 'linking',
1421
+ examples: ["import { ElementName, MetadataBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<MetadataBlock\n\t\t\tprimary={[{ name: ElementName.CollaboratorGroup }, { name: ElementName.ModifiedOn }]}\n\t\t/>\n\t</ExampleContainer>\n);"],
1422
+ props: [{
1423
+ name: 'blockRef',
1424
+ type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1425
+ description: 'Ref to block wrapper div.'
1407
1426
  }, {
1408
- name: 'role',
1409
- type: 'string',
1410
- description: 'Use this to set the accessibility role for the hover card.\nShould be used along with `label` or `titleId` for supported roles.'
1427
+ name: 'children',
1428
+ type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1429
+ description: 'React children'
1411
1430
  }, {
1412
- name: 'shouldRenderToParent',
1431
+ name: 'hideIconLoadingSkeleton',
1413
1432
  type: 'boolean',
1414
- description: 'Whether the hover card should render to the parent element, to the\natlaskit-portal-container at the root of the document. Defaults to false.'
1433
+ description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1415
1434
  }, {
1416
- name: 'titleId',
1417
- type: 'string',
1418
- description: 'Id referenced by the hover card `aria-labelledby` attribute.\nUsage of either this, or the `label` attribute is strongly recommended.'
1435
+ name: 'maxLines',
1436
+ type: 'number',
1437
+ description: 'Determines the number of lines the metadata should span across.\nDefault is 2. Maximum is 2.',
1438
+ defaultValue: '2'
1419
1439
  }, {
1420
- name: 'url',
1440
+ name: 'placeholderId',
1421
1441
  type: 'string',
1422
- description: 'Hover card will display data from this url.',
1423
- isRequired: true
1442
+ description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1424
1443
  }, {
1425
- name: 'zIndex',
1426
- type: 'number',
1427
- description: 'Z-index that the hover card should be displayed in.\nThis is passed to the portal component.'
1444
+ name: 'primary',
1445
+ type: 'ElementItem[]',
1446
+ description: 'An array of metadata elements to display on the left.\nBy default elements will be shown to the right of the TitleBlock.\nThe visibility of the element is determine by the link data.\nIf link contain no data to display a particular element, the element\nwill simply not show up.\n@see ElementItem',
1447
+ defaultValue: '[]'
1448
+ }, {
1449
+ name: 'secondary',
1450
+ type: 'ElementItem[]',
1451
+ description: 'An array of metadata elements to display on the right.\nBy default elements will be shown to the right of the TitleBlock.\nThe visibility of the element is determine by the link data.\nIf link contain no data to display a particular element, the element\nwill simply not show up.\n@see ElementItem',
1452
+ defaultValue: '[]'
1453
+ }, {
1454
+ name: 'size',
1455
+ type: 'SmartLinkSize',
1456
+ description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1428
1457
  }]
1429
1458
  }, {
1430
- name: 'LinkUrl',
1459
+ name: 'PreviewBlock',
1431
1460
  package: '@atlaskit/smart-card',
1432
- description: 'LinkUrl is a plain hyperlink (<a>) with a built-in safety check. Use it when you want to warn users if the link description looks like one URL but the actual destination is different.',
1461
+ description: 'A block component that displays a preview image or media for the Smart Link.',
1433
1462
  status: 'general-availability',
1434
- usageGuidelines: ['Use when the link text might look like one URL but point elsewhere—e.g. user-generated or external links—so users get a warning before navigating.'],
1463
+ usageGuidelines: ['Use when the linked resource has a preview image or media and you want to surface it in the block card.'],
1435
1464
  contentGuidelines: [],
1436
- accessibilityGuidelines: ['Use descriptive link text that indicates the destination or action; avoid exposing only the URL when possible.', 'Ensure the safety-check warning (when link text and destination differ) is announced to screen readers.'],
1437
- keywords: ['smart-card', 'link', 'url', 'safety', 'hyperlink'],
1465
+ accessibilityGuidelines: ['If the preview image conveys information, provide meaningful alt text; if purely decorative, use alt="" or aria-hidden.', 'Ensure no critical information is shown only in the preview; duplicate in text or metadata when needed.'],
1466
+ keywords: ['smart-card', 'preview block', 'flexible', 'block', 'preview', 'image'],
1438
1467
  category: 'linking',
1439
- examples: ['import Link from \'@atlaskit/link\';\nimport { CardClient, SmartCardProvider } from \'@atlaskit/link-provider\';\nimport { UnAuthClient } from \'@atlaskit/link-test-helpers\';\nimport LinkUrl from \'../../src/view/LinkUrl\';\nexport default (): React.JSX.Element => (\n\t<div>\n\t\t<h2>Link safety warning</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tLink description is a URL and it\'s different from a destination.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.google.com/">atlassian.com</LinkUrl>\n\t\t\t</li>\n\t\t</ul>\n\t\t<h2>No link safety warning</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tLink description is a plain text.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.google.com/">Here is a google link</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink description is a URL identical to a destination.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\thttps://www.atlassian.com/solutions/devops\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink is a multi-line URL.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\t<p>Help</p>\n\t\t\t\t\t<Link href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\t\thttps://www.atlassian.com/solutions/devops\n\t\t\t\t\t</Link>\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink is a multi-line URL.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://hello.atlassian.com/wiki">\n\t\t\t\t\t<div>Help</div>\n\t\t\t\t\t<span>https://hello.atlas...</span>\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t</ul>\n\t\t<h2>Link with smart link resolver</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tThis link trigger smart link resolver\n\t\t\t\t<br />\n\t\t\t\t<SmartCardProvider client={new CardClient(\'stg\')}>\n\t\t\t\t\t<LinkUrl enableResolve={true} href="https://www.google.com/">\n\t\t\t\t\t\thttps://www.resolved-link.com/\n\t\t\t\t\t</LinkUrl>\n\t\t\t\t</SmartCardProvider>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tThis link trigger smart link resolver with unauth\n\t\t\t\t<br />\n\t\t\t\t<SmartCardProvider client={new UnAuthClient()}>\n\t\t\t\t\t<LinkUrl enableResolve={true} href="https://www.unauth-link.com/">\n\t\t\t\t\t\thttps://www.unauth-link.com/\n\t\t\t\t\t</LinkUrl>\n\t\t\t\t</SmartCardProvider>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n);'],
1468
+ examples: ["import { PreviewBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<PreviewBlock />\n\t</ExampleContainer>\n);"],
1440
1469
  props: [{
1441
- name: 'checkSafety',
1470
+ name: 'blockRef',
1471
+ type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1472
+ description: 'Ref to block wrapper div.'
1473
+ }, {
1474
+ name: 'children',
1475
+ type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1476
+ description: 'React children'
1477
+ }, {
1478
+ name: 'hideIconLoadingSkeleton',
1442
1479
  type: 'boolean',
1443
- description: 'Determines if we want to perform a link safety check. True by default.'
1480
+ description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1444
1481
  }, {
1445
- name: 'enableResolve',
1482
+ name: 'ignoreContainerPadding',
1446
1483
  type: 'boolean',
1447
- description: 'Determines if we want to resolve the URL in the background for Rovo indexing. This has no impact on the UI/UX. False by default.'
1484
+ description: 'Indicate whether preview block should ignore the padding its parent container.\nDefault is false.'
1448
1485
  }, {
1449
- name: 'isLinkComponent',
1450
- type: 'boolean'
1486
+ name: 'overrideUrl',
1487
+ type: 'string',
1488
+ description: 'An image URL to render. This will replace the default image from smart link data.'
1489
+ }, {
1490
+ name: 'placeholderId',
1491
+ type: 'string',
1492
+ description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1493
+ }, {
1494
+ name: 'placement',
1495
+ type: 'MediaPlacement',
1496
+ description: 'The placement of the preview block in relation of its container.\nThis makes the preview block leave flex layout to absolute positioning\nto the left/right of the container.'
1497
+ }, {
1498
+ name: 'size',
1499
+ type: 'SmartLinkSize',
1500
+ description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1451
1501
  }]
1452
1502
  }, {
1453
1503
  name: 'FlexibleCard',
@@ -1645,145 +1695,6 @@ var atlaskitComponents = exports.atlaskitComponents = [{
1645
1695
  type: 'string',
1646
1696
  description: 'The URL of the link for Competitor Prompt'
1647
1697
  }]
1648
- }, {
1649
- name: 'MetadataBlock',
1650
- package: '@atlaskit/smart-card',
1651
- description: 'A block component that displays a row of metadata elements (e.g. created by, due date, state) in a Smart Link.',
1652
- status: 'general-availability',
1653
- usageGuidelines: ['Use when you need a single row of metadata (e.g. created by, due date, state) in a block Smart Link.'],
1654
- contentGuidelines: [],
1655
- accessibilityGuidelines: ['Ensure metadata is available to screen readers (e.g. not conveyed only by color or icon).', 'Use a list or group with an accessible name if the metadata row has a specific purpose (e.g. "Contributors", "Dates").'],
1656
- keywords: ['smart-card', 'metadata block', 'flexible', 'block', 'metadata'],
1657
- category: 'linking',
1658
- examples: ["import { ElementName, MetadataBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<MetadataBlock\n\t\t\tprimary={[{ name: ElementName.CollaboratorGroup }, { name: ElementName.ModifiedOn }]}\n\t\t/>\n\t</ExampleContainer>\n);"],
1659
- props: [{
1660
- name: 'blockRef',
1661
- type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1662
- description: 'Ref to block wrapper div.'
1663
- }, {
1664
- name: 'children',
1665
- type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1666
- description: 'React children'
1667
- }, {
1668
- name: 'hideIconLoadingSkeleton',
1669
- type: 'boolean',
1670
- description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1671
- }, {
1672
- name: 'maxLines',
1673
- type: 'number',
1674
- description: 'Determines the number of lines the metadata should span across.\nDefault is 2. Maximum is 2.',
1675
- defaultValue: '2'
1676
- }, {
1677
- name: 'placeholderId',
1678
- type: 'string',
1679
- description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1680
- }, {
1681
- name: 'primary',
1682
- type: 'ElementItem[]',
1683
- description: 'An array of metadata elements to display on the left.\nBy default elements will be shown to the right of the TitleBlock.\nThe visibility of the element is determine by the link data.\nIf link contain no data to display a particular element, the element\nwill simply not show up.\n@see ElementItem',
1684
- defaultValue: '[]'
1685
- }, {
1686
- name: 'secondary',
1687
- type: 'ElementItem[]',
1688
- description: 'An array of metadata elements to display on the right.\nBy default elements will be shown to the right of the TitleBlock.\nThe visibility of the element is determine by the link data.\nIf link contain no data to display a particular element, the element\nwill simply not show up.\n@see ElementItem',
1689
- defaultValue: '[]'
1690
- }, {
1691
- name: 'size',
1692
- type: 'SmartLinkSize',
1693
- description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1694
- }]
1695
- }, {
1696
- name: 'PreviewBlock',
1697
- package: '@atlaskit/smart-card',
1698
- description: 'A block component that displays a preview image or media for the Smart Link.',
1699
- status: 'general-availability',
1700
- usageGuidelines: ['Use when the linked resource has a preview image or media and you want to surface it in the block card.'],
1701
- contentGuidelines: [],
1702
- accessibilityGuidelines: ['If the preview image conveys information, provide meaningful alt text; if purely decorative, use alt="" or aria-hidden.', 'Ensure no critical information is shown only in the preview; duplicate in text or metadata when needed.'],
1703
- keywords: ['smart-card', 'preview block', 'flexible', 'block', 'preview', 'image'],
1704
- category: 'linking',
1705
- examples: ["import { PreviewBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<PreviewBlock />\n\t</ExampleContainer>\n);"],
1706
- props: [{
1707
- name: 'blockRef',
1708
- type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1709
- description: 'Ref to block wrapper div.'
1710
- }, {
1711
- name: 'children',
1712
- type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1713
- description: 'React children'
1714
- }, {
1715
- name: 'hideIconLoadingSkeleton',
1716
- type: 'boolean',
1717
- description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1718
- }, {
1719
- name: 'ignoreContainerPadding',
1720
- type: 'boolean',
1721
- description: 'Indicate whether preview block should ignore the padding its parent container.\nDefault is false.'
1722
- }, {
1723
- name: 'overrideUrl',
1724
- type: 'string',
1725
- description: 'An image URL to render. This will replace the default image from smart link data.'
1726
- }, {
1727
- name: 'placeholderId',
1728
- type: 'string',
1729
- description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1730
- }, {
1731
- name: 'placement',
1732
- type: 'MediaPlacement',
1733
- description: 'The placement of the preview block in relation of its container.\nThis makes the preview block leave flex layout to absolute positioning\nto the left/right of the container.'
1734
- }, {
1735
- name: 'size',
1736
- type: 'SmartLinkSize',
1737
- description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1738
- }]
1739
- }, {
1740
- name: 'FooterBlock',
1741
- package: '@atlaskit/smart-card',
1742
- description: 'A block component for the Smart Link footer, typically showing actions (e.g. copy, open, follow).',
1743
- status: 'general-availability',
1744
- usageGuidelines: ['Use at the bottom of a FlexibleCard when you need actions such as copy link, open, or follow.'],
1745
- contentGuidelines: [],
1746
- accessibilityGuidelines: ['Give each action button or control an accessible name (e.g. "Copy link", "Open in new tab") so purpose is clear to screen readers.', 'Ensure actions are keyboard operable and appear in a logical tab order.'],
1747
- keywords: ['smart-card', 'footer block', 'flexible', 'block', 'actions'],
1748
- category: 'linking',
1749
- examples: ["import { FooterBlock } from '../../src';\nimport ExampleContainer from './example-container';\nexport default (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<FooterBlock />\n\t</ExampleContainer>\n);"],
1750
- props: [{
1751
- name: 'actions',
1752
- type: 'ActionItem[]',
1753
- description: 'An array of actions to be displayed on the right.\nAdding more than three actions will result in the second and following\nactions being hidden inside of a dropdown\n@see ActionItem'
1754
- }, {
1755
- name: 'alwaysShow',
1756
- type: 'boolean',
1757
- description: 'Allows rendering of the footer regardless of whether the block has resolved'
1758
- }, {
1759
- name: 'blockRef',
1760
- type: '((instance: HTMLDivElement) => void) | React.RefObject<HTMLDivElement>',
1761
- description: 'Ref to block wrapper div.'
1762
- }, {
1763
- name: 'children',
1764
- type: 'string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | React.ReactPortal',
1765
- description: 'React children'
1766
- }, {
1767
- name: 'hideIconLoadingSkeleton',
1768
- type: 'boolean',
1769
- description: 'For image icons in the title, whether to hide the loading skeleton while the image is loading.'
1770
- }, {
1771
- name: 'hideProvider',
1772
- type: 'boolean',
1773
- description: 'Allows hiding of the resources provider'
1774
- }, {
1775
- name: 'onActionMenuOpenChange',
1776
- type: '(options: OnActionMenuOpenChangeOptions) => void',
1777
- description: 'Function to be called when footer action dropdown open state is changed.'
1778
- }, {
1779
- name: 'placeholderId',
1780
- type: 'string',
1781
- description: 'A unique identifier for the placeholder loading state, which is constant across all loading states of the same item.'
1782
- }, {
1783
- name: 'size',
1784
- type: 'SmartLinkSize',
1785
- description: 'The size of the block and the size that the underlying elements should\ndefault to.'
1786
- }]
1787
1698
  }, {
1788
1699
  name: 'useSmartLinkEvents',
1789
1700
  package: '@atlaskit/smart-card',
@@ -1911,7 +1822,7 @@ var atlaskitComponents = exports.atlaskitComponents = [{
1911
1822
  accessibilityGuidelines: ['When rendering actions from this hook (e.g. buttons or menus), provide accessible labels (e.g. from action.text) and ensure keyboard support.'],
1912
1823
  keywords: ['smart-card', 'hooks', 'useSmartLinkActions', 'actions'],
1913
1824
  category: 'linking',
1914
- examples: ["import React, { useCallback } from 'react';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { ResolvedClient, ResolvedClientUrl } from '@atlaskit/link-test-helpers';\nimport { Box } from '@atlaskit/primitives/compiled';\nimport { Card, CardAction } from '../../src';\nimport { useSmartLinkActions } from '../../src/hooks';\nimport ExampleContainer from './example-container';\nconst PreviewButton = ({ url }: { url: string }) => {\n\tconst actions = useSmartLinkActions({ url, appearance: 'block' });\n\t// actions are returned in an array, find the preview action\n\tconst previewAction = actions.find((action) => action.id === 'preview-content');\n\tconst handleClick = useCallback(() => {\n\t\tif (previewAction) {\n\t\t\tpreviewAction.invoke();\n\t\t}\n\t}, [previewAction]);\n\tif (!previewAction) {\n\t\treturn null;\n\t}\n\treturn <Button onClick={handleClick}>{previewAction.text}</Button>;\n};\nconst UseSmartLinkActionsExample = (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<SmartCardProvider client={new ResolvedClient()}>\n\t\t\t<Card\n\t\t\t\tappearance=\"block\"\n\t\t\t\turl={ResolvedClientUrl}\n\t\t\t\tactionOptions={{ hide: false, exclude: [CardAction.PreviewAction] }}\n\t\t\t/>\n\t\t\t<Box paddingBlockStart=\"space.200\">\n\t\t\t\t<PreviewButton url={ResolvedClientUrl} />\n\t\t\t</Box>\n\t\t</SmartCardProvider>\n\t</ExampleContainer>\n);\nexport default UseSmartLinkActionsExample;"],
1825
+ examples: ["import React, { useCallback } from 'react';\nimport Button from '@atlaskit/button/new';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { ResolvedClient, ResolvedClientUrl } from '@atlaskit/link-test-helpers';\nimport { Box } from '@atlaskit/primitives/compiled';\nimport { Card } from '../../src';\nimport { CardAction } from '../../src/constants';\nimport { useSmartLinkActions } from '../../src/hooks';\nimport ExampleContainer from './example-container';\nconst PreviewButton = ({ url }: { url: string }) => {\n\tconst actions = useSmartLinkActions({ url, appearance: 'block' });\n\t// actions are returned in an array, find the preview action\n\tconst previewAction = actions.find((action) => action.id === 'preview-content');\n\tconst handleClick = useCallback(() => {\n\t\tif (previewAction) {\n\t\t\tpreviewAction.invoke();\n\t\t}\n\t}, [previewAction]);\n\tif (!previewAction) {\n\t\treturn null;\n\t}\n\treturn <Button onClick={handleClick}>{previewAction.text}</Button>;\n};\nconst UseSmartLinkActionsExample = (): React.JSX.Element => (\n\t<ExampleContainer>\n\t\t<SmartCardProvider client={new ResolvedClient()}>\n\t\t\t<Card\n\t\t\t\tappearance=\"block\"\n\t\t\t\turl={ResolvedClientUrl}\n\t\t\t\tactionOptions={{ hide: false, exclude: [CardAction.PreviewAction] }}\n\t\t\t/>\n\t\t\t<Box paddingBlockStart=\"space.200\">\n\t\t\t\t<PreviewButton url={ResolvedClientUrl} />\n\t\t\t</Box>\n\t\t</SmartCardProvider>\n\t</ExampleContainer>\n);\nexport default UseSmartLinkActionsExample;"],
1915
1826
  props: [{
1916
1827
  name: 'actionOptions',
1917
1828
  type: 'CardActionVisibilityOptions & { previewAction?: { hideBlanket?: boolean; size?: EmbedModalSize; }; rovoChatAction?: { optIn: boolean; }; }',
@@ -1941,4 +1852,97 @@ var atlaskitComponents = exports.atlaskitComponents = [{
1941
1852
  description: 'Smart Link URL for which actions will be invoked.\n@example https://start.atlassian.com',
1942
1853
  isRequired: true
1943
1854
  }]
1855
+ }, {
1856
+ name: 'HoverCard',
1857
+ package: '@atlaskit/smart-card',
1858
+ description: 'Hover cards can be used as a standalone component to wrap any React component and display information about a supplied URL when the user hovers over the child. Different actions are shown depending on the resource type.',
1859
+ status: 'general-availability',
1860
+ usageGuidelines: ['Use when you need a Smart Link preview on hover over a custom trigger (e.g. text, icon). For hover preview on inline Smart Links in body text, use Card with showHoverPreview instead.'],
1861
+ contentGuidelines: [],
1862
+ accessibilityGuidelines: ['Provide a keyboard-accessible way to open the preview (e.g. focus or explicit trigger); do not rely on hover alone.', 'Ensure the trigger element has an accessible name and role (e.g. link or button).', 'Ensure the hover card content is announced when shown (e.g. aria-describedby or live region) and can be dismissed via keyboard.'],
1863
+ keywords: ['smart-card', 'hover card', 'hover', 'preview', 'smart link'],
1864
+ category: 'linking',
1865
+ examples: ["import { IntlProvider } from 'react-intl';\nimport { SmartCardProvider } from '@atlaskit/link-provider';\nimport { ResolvedClient, ResolvedClientEmbedUrl } from '@atlaskit/link-test-helpers';\nimport { HoverCard } from '../../src/hoverCard';\nimport HoverOverMe from '../utils/hover-card-box';\nexport default (): React.JSX.Element => (\n\t<IntlProvider locale=\"en\">\n\t\t<SmartCardProvider client={new ResolvedClient('stg')}>\n\t\t\t<HoverCard url={ResolvedClientEmbedUrl}>\n\t\t\t\t<HoverOverMe />\n\t\t\t</HoverCard>\n\t\t</SmartCardProvider>\n\t</IntlProvider>\n);"],
1866
+ props: [{
1867
+ name: 'actionOptions',
1868
+ type: 'CardActionVisibilityOptions & { previewAction?: { hideBlanket?: boolean; size?: EmbedModalSize; }; rovoChatAction?: { optIn: boolean; }; }',
1869
+ description: 'Configure visibility of server and client actions'
1870
+ }, {
1871
+ name: 'allowEventPropagation',
1872
+ type: 'boolean',
1873
+ description: 'Allow click event to bubble up from hover preview trigger component.'
1874
+ }, {
1875
+ name: 'canOpen',
1876
+ type: 'boolean',
1877
+ description: 'Determines if the hover card is allowed to open. If changed from true to false while the\nhover card is open, the hover card will be closed.'
1878
+ }, {
1879
+ name: 'children',
1880
+ type: 'React.ReactElement<any, string | React.JSXElementConstructor<any>>',
1881
+ description: 'React children component over which the hover card can be triggered.',
1882
+ isRequired: true
1883
+ }, {
1884
+ name: 'closeOnChildClick',
1885
+ type: 'boolean',
1886
+ description: 'Determines if the hover card should close when the children passed in are\nclicked.'
1887
+ }, {
1888
+ name: 'hoverPreviewOptions',
1889
+ type: 'HoverPreviewOptions',
1890
+ description: 'Additional configurations for hover card.'
1891
+ }, {
1892
+ name: 'id',
1893
+ type: 'string',
1894
+ description: 'Unique ID for a hover card. Used for analytics.'
1895
+ }, {
1896
+ name: 'label',
1897
+ type: 'string',
1898
+ description: 'Refers to an `aria-label` attribute. Sets an accessible name for the hover card to announce it to users of assistive technology.\nUsage of either this, or the `titleId` attribute is strongly recommended.'
1899
+ }, {
1900
+ name: 'onVisibilityChange',
1901
+ type: '(isVisible: boolean) => void',
1902
+ description: 'Callback function that is called when the hover card is visible or hidden.'
1903
+ }, {
1904
+ name: 'role',
1905
+ type: 'string',
1906
+ description: 'Use this to set the accessibility role for the hover card.\nShould be used along with `label` or `titleId` for supported roles.'
1907
+ }, {
1908
+ name: 'shouldRenderToParent',
1909
+ type: 'boolean',
1910
+ description: 'Whether the hover card should render to the parent element, to the\natlaskit-portal-container at the root of the document. Defaults to false.'
1911
+ }, {
1912
+ name: 'titleId',
1913
+ type: 'string',
1914
+ description: 'Id referenced by the hover card `aria-labelledby` attribute.\nUsage of either this, or the `label` attribute is strongly recommended.'
1915
+ }, {
1916
+ name: 'url',
1917
+ type: 'string',
1918
+ description: 'Hover card will display data from this url.',
1919
+ isRequired: true
1920
+ }, {
1921
+ name: 'zIndex',
1922
+ type: 'number',
1923
+ description: 'Z-index that the hover card should be displayed in.\nThis is passed to the portal component.'
1924
+ }]
1925
+ }, {
1926
+ name: 'LinkUrl',
1927
+ package: '@atlaskit/smart-card',
1928
+ description: 'LinkUrl is a plain hyperlink (<a>) with a built-in safety check. Use it when you want to warn users if the link description looks like one URL but the actual destination is different.',
1929
+ status: 'general-availability',
1930
+ usageGuidelines: ['Use when the link text might look like one URL but point elsewhere—e.g. user-generated or external links—so users get a warning before navigating.'],
1931
+ contentGuidelines: [],
1932
+ accessibilityGuidelines: ['Use descriptive link text that indicates the destination or action; avoid exposing only the URL when possible.', 'Ensure the safety-check warning (when link text and destination differ) is announced to screen readers.'],
1933
+ keywords: ['smart-card', 'link', 'url', 'safety', 'hyperlink'],
1934
+ category: 'linking',
1935
+ examples: ['import Link from \'@atlaskit/link\';\nimport { CardClient, SmartCardProvider } from \'@atlaskit/link-provider\';\nimport { UnAuthClient } from \'@atlaskit/link-test-helpers\';\nimport LinkUrl from \'../../src/view/LinkUrl\';\nexport default (): React.JSX.Element => (\n\t<div>\n\t\t<h2>Link safety warning</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tLink description is a URL and it\'s different from a destination.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.google.com/">atlassian.com</LinkUrl>\n\t\t\t</li>\n\t\t</ul>\n\t\t<h2>No link safety warning</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tLink description is a plain text.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.google.com/">Here is a google link</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink description is a URL identical to a destination.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\thttps://www.atlassian.com/solutions/devops\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink is a multi-line URL.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\t<p>Help</p>\n\t\t\t\t\t<Link href="https://www.atlassian.com/solutions/devops">\n\t\t\t\t\t\thttps://www.atlassian.com/solutions/devops\n\t\t\t\t\t</Link>\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tLink is a multi-line URL.\n\t\t\t\t<br />\n\t\t\t\t<LinkUrl href="https://hello.atlassian.com/wiki">\n\t\t\t\t\t<div>Help</div>\n\t\t\t\t\t<span>https://hello.atlas...</span>\n\t\t\t\t</LinkUrl>\n\t\t\t</li>\n\t\t</ul>\n\t\t<h2>Link with smart link resolver</h2>\n\t\t<ul>\n\t\t\t<li>\n\t\t\t\tThis link trigger smart link resolver\n\t\t\t\t<br />\n\t\t\t\t<SmartCardProvider client={new CardClient(\'stg\')}>\n\t\t\t\t\t<LinkUrl enableResolve={true} href="https://www.google.com/">\n\t\t\t\t\t\thttps://www.resolved-link.com/\n\t\t\t\t\t</LinkUrl>\n\t\t\t\t</SmartCardProvider>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\tThis link trigger smart link resolver with unauth\n\t\t\t\t<br />\n\t\t\t\t<SmartCardProvider client={new UnAuthClient()}>\n\t\t\t\t\t<LinkUrl enableResolve={true} href="https://www.unauth-link.com/">\n\t\t\t\t\t\thttps://www.unauth-link.com/\n\t\t\t\t\t</LinkUrl>\n\t\t\t\t</SmartCardProvider>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n);'],
1936
+ props: [{
1937
+ name: 'checkSafety',
1938
+ type: 'boolean',
1939
+ description: 'Determines if we want to perform a link safety check. True by default.'
1940
+ }, {
1941
+ name: 'enableResolve',
1942
+ type: 'boolean',
1943
+ description: 'Determines if we want to resolve the URL in the background for Rovo indexing. This has no impact on the UI/UX. False by default.'
1944
+ }, {
1945
+ name: 'isLinkComponent',
1946
+ type: 'boolean'
1947
+ }]
1944
1948
  }];