overleaf/services/web/frontend/js/shared/components/labs/labs-experiments-widget.tsx

150 lines
3.9 KiB
TypeScript
Raw Normal View History

import { ReactNode, useCallback } from 'react'
import { useTranslation } from 'react-i18next'
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
import OLBadge from '@/features/ui/components/ol/ol-badge'
import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
import { postJSON } from '@/infrastructure/fetch-json'
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
import OLButton from '@/features/ui/components/ol/ol-button'
import getMeta from '@/utils/meta'
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
import { isBootstrap5 } from '@/features/utils/bootstrap-5'
type IntegrationLinkingWidgetProps = {
logo: ReactNode
title: string
description: string
helpPath?: string
labsEnabled?: boolean
experimentName: string
setErrorMessage: (message: string) => void
optedIn: boolean
setOptedIn: (optedIn: boolean) => void
}
export function LabsExperimentWidget({
logo,
title,
description,
helpPath,
labsEnabled,
experimentName,
setErrorMessage,
optedIn,
setOptedIn,
}: IntegrationLinkingWidgetProps) {
const { t } = useTranslation()
const experimentsErrorMessage = t(
'we_are_unable_to_opt_you_into_this_experiment'
)
const allowedExperiments = getMeta('ol-allowedExperiments')
const disabled = !allowedExperiments.includes(experimentName) && !optedIn
const handleEnable = useCallback(async () => {
try {
const enablePath = `/labs/participate/experiments/${experimentName}/opt-in`
await postJSON(enablePath)
setOptedIn(true)
} catch (err) {
setErrorMessage(experimentsErrorMessage)
}
}, [experimentName, setErrorMessage, experimentsErrorMessage, setOptedIn])
const handleDisable = useCallback(async () => {
try {
const disablePath = `/labs/participate/experiments/${experimentName}/opt-out`
await postJSON(disablePath)
setOptedIn(false)
} catch (err) {
setErrorMessage(experimentsErrorMessage)
}
}, [experimentName, setErrorMessage, experimentsErrorMessage, setOptedIn])
return (
<div
className={`labs-experiment-widget-container ${disabled ? 'disabled-experiment' : ''}`}
>
<div className="p-2">{logo}</div>
<div className="description-container">
<div className="title-row">
<h3 className="h4">{title}</h3>
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
{optedIn && <OLBadge bg="info">{t('enabled')}</OLBadge>}
</div>
<p className="small">
{description}{' '}
{helpPath && (
<a href={helpPath} target="_blank" rel="noreferrer">
{t('learn_more')}
</a>
)}
</p>
</div>
{disabled && (
<div className="disabled-explanation">{t('experiment_full')}</div>
)}
<div>
{labsEnabled && (
<ActionButton
optedIn={optedIn}
handleDisable={handleDisable}
handleEnable={handleEnable}
disabled={disabled}
/>
)}
</div>
</div>
)
}
type ActionButtonProps = {
optedIn?: boolean
disabled?: boolean
handleEnable: () => void
handleDisable: () => void
}
function ActionButton({
optedIn,
disabled,
handleEnable,
handleDisable,
}: ActionButtonProps) {
const { t } = useTranslation()
if (optedIn) {
return (
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
<OLButton variant="secondary" onClick={handleDisable}>
{t('turn_off')}
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
</OLButton>
)
} else if (disabled) {
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
const tooltipableButton = isBootstrap5() ? (
<div className="d-inline-block">
<OLButton variant="primary" disabled>
{t('turn_on')}
</OLButton>
</div>
) : (
<OLButton variant="primary" disabled>
{t('turn_on')}
</OLButton>
)
return (
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
<OLTooltip
id="experiment-disabled"
description={t('this_experiment_isnt_accepting_new_participants')}
overlayProps={{ delay: 0 }}
>
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
{tooltipableButton}
</OLTooltip>
)
} else {
return (
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
<OLButton variant="primary" onClick={handleEnable}>
{t('turn_on')}
[web] Migrate AI Error Assistant to BS5 (#21129) * [storybook] Rerender story when switching BS3/BS5 * [storybook] Add SCSS loader to storybook * [storybook] Add some AI error assistant stories * Rename ai-error-assistant.less to .scss * Update less variables to sass * Remove duplicated selector * Replace react-bootstrap components by `OL...` * Update Checkboxes after BS5 update * Add IDs so clicking on labels work * Add BS5 class name in SCSS Note: `answer-not-detailed` is used twice in the Radios. I think it's a mistake: there should be another name for the "ai_feedback_the_suggestion_wasnt_the_best_fix_available" radio * Rename ID `answer-not-detailed` -> `answer-not-best-fix` * Pass name and value to BS3Radio/BS3Checkbox * [storybook] Add delay before AI suggestion (shows the animation) * Add a number after the checkbox/radio IDs, to allow multiple forms to be displayed Without this, clicks on second form are updating the first form! Another solution could be to wrap the input in the label, but it comes with other problems. See https://css-tricks.com/html-inputs-and-labels-a-love-story/ * [storybook] Update `LabsAiPromoBanner` * Use CSS variables instead of hardcoded values * Make radio input flex * Replace `blue-10` by `bg-info-03` * Fix `SuggestFixButton` * Fix `AiErrorAssistantCopyCode` * Fix button loading in BS5 * Use OLBadge * Fix Button variants * Update `suggestFixAction` * Migrate Tooltip and Button to BS5 in LabsExperimentWidget * Update BS3/BS5 button classname in AiErrorAssistantCopyCode Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> * [storybook] Allow to choose props of `LabsExperimentWidget` * Fixup `OLTooltip`: Display the tooltip on disabled button in BS5 * Update Tooltips to BS5 --------- Co-authored-by: Rebeka <rebeka.dekany@overleaf.com> GitOrigin-RevId: 08d594e772c0a3b6db1c6081337cc2d079f478a5
2024-10-23 03:33:56 -04:00
</OLButton>
)
}
}
export default LabsExperimentWidget