Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
28c0109
docs: Move autocomplete stories to v9 storybook (#2888)
jdeichert Jan 27, 2026
da8eeef
chore(release): Publish
walter-harriman-bot Jan 27, 2026
9c68197
fix(components-native): Provide way for users to escape react native …
jdeichert Jan 27, 2026
7ebeebd
chore(release): Publish
walter-harriman-bot Jan 27, 2026
ae1e36b
fix(components): Support ref callbacks with InputTime and Select (#2892)
jdeichert Jan 28, 2026
210d6b5
chore(release): Publish
walter-harriman-bot Jan 28, 2026
a4a485f
fix(components): Refactor DataTable.Footer (#2882)
taylorvnoj Jan 28, 2026
a264eab
chore(release): Publish
walter-harriman-bot Jan 28, 2026
048b8c4
fix(components): Prevent invalid label from causing infinite loop wit…
jdeichert Jan 30, 2026
8774f17
chore(release): Publish
walter-harriman-bot Jan 30, 2026
f7e0850
fix(components): REVERT Prevent invalid label from causing infinite l…
jdeichert Feb 2, 2026
f7a0a56
chore(release): Publish
walter-harriman-bot Feb 2, 2026
d71cc1c
feat(components): Update Switch component design (#2897)
jdeichert Feb 5, 2026
8c986f2
chore(release): Publish
walter-harriman-bot Feb 5, 2026
0299b36
fix(components): Hide tooltips when out of view (#2894)
jdeichert Feb 6, 2026
e3b22e7
chore(release): Publish
walter-harriman-bot Feb 6, 2026
27bc464
docs(components): Document Problematic Scenarios with AnimatedPresenc…
ZakaryH Feb 10, 2026
54c4c66
fix(components): Fix Switch icon position (#2905)
jdeichert Feb 10, 2026
19007f2
chore(release): Publish
walter-harriman-bot Feb 10, 2026
b11cfd6
fix(design): Add missing dark mode token (#2900)
paulmotz Feb 12, 2026
374e610
chore(release): Publish
walter-harriman-bot Feb 12, 2026
07f110c
fix(components): DataTable has layout prop for fixed or auto (#2883)
taylorvnoj Feb 12, 2026
48dbbb2
chore(release): Publish
walter-harriman-bot Feb 12, 2026
3d06346
chore(components): Add additional Page visual tests before refactor. …
scotttjob Feb 12, 2026
fefc652
refactor(components): Update Avatar UI (#2909)
taylorvnoj Feb 13, 2026
da1c6df
chore(release): Publish
walter-harriman-bot Feb 13, 2026
ea7a5a1
feat(components): Improve Tooltip + Icon Button Accessibility (#2907)
ZakaryH Feb 17, 2026
2ead4b3
chore(release): Publish
walter-harriman-bot Feb 17, 2026
ac1cd1e
feat(components-native): Expose Isolated Aspects of FormatFile (#2908)
ZakaryH Feb 17, 2026
f18222f
chore(release): Publish
walter-harriman-bot Feb 17, 2026
525c11e
fix(components): DataTableRow interactivity updates (#2913)
taylorvnoj Feb 17, 2026
c91a8c3
chore(release): Publish
walter-harriman-bot Feb 17, 2026
e4b29af
fix(components): Stabilize Autocomplete Internal References (#2914)
ZakaryH Feb 18, 2026
1baaa9f
chore(release): Publish
walter-harriman-bot Feb 18, 2026
b27c440
fix(components): Added Link interaction styling (#2916)
MichaelParadis Feb 18, 2026
f84b3ba
chore(release): Publish
walter-harriman-bot Feb 18, 2026
7a01788
revert(components): Improve Tooltip + Icon Button Accessibility (#2923)
ZakaryH Feb 23, 2026
7f1df50
chore(release): Publish
walter-harriman-bot Feb 23, 2026
c2beb0c
fix(components): Fix Lightbox transitions [JOB-152407] (#2918)
Aiden-Brine Feb 23, 2026
74ad056
chore(release): Publish
walter-harriman-bot Feb 23, 2026
d57b082
fix(components): Update SegmentedControl visual styling and add hover…
nad182 Feb 24, 2026
5e13c04
chore(release): Publish
walter-harriman-bot Feb 24, 2026
d137e67
fix(components): Adjust Clearable Positioning (#2925)
ZakaryH Feb 24, 2026
cca677d
chore(release): Publish
walter-harriman-bot Feb 24, 2026
6ccd434
feat(components-native): expose onLoadEnd from FormatFileThumbnail (#…
YousufAJ Feb 25, 2026
1c8d10a
chore(release): Publish
walter-harriman-bot Feb 25, 2026
898a6de
feat(components): Add UNSAFE to Menu Trigger (#2927)
ZakaryH Feb 25, 2026
9089540
chore(release): Publish
walter-harriman-bot Feb 25, 2026
e7dfa28
feat(components): Add visual test coverage to LightBox (#2930)
lawrence-jobber Feb 26, 2026
b8dfc56
fix(components): Fix DatePickers rendering inside Modals (#2912)
jdeichert Feb 26, 2026
6a70e6f
chore(release): Publish
walter-harriman-bot Feb 27, 2026
adc0483
chore(components): Refactor Page to be built from composed parts (#2867)
scotttjob Feb 27, 2026
5c6d2a8
chore(release): Publish
walter-harriman-bot Feb 27, 2026
1d129cb
feat(components): Add New Schedule UserConfirmed Status Icon (#2932)
daniel-jobber Mar 2, 2026
a2c243b
chore(release): Publish
walter-harriman-bot Mar 2, 2026
8ad6fa6
feat(components): Autocomplete Multiselect (#2921)
ZakaryH Mar 2, 2026
9639efb
chore(release): Publish
walter-harriman-bot Mar 2, 2026
4dda576
fix(components): Remove doubled shadow on SideDrawer (#2933)
Aiden-Brine Mar 2, 2026
45e47de
chore(release): Publish
walter-harriman-bot Mar 3, 2026
d184425
feat(components): Make Atlantis LightBox composable [153332] (#2929)
lawrence-jobber Mar 3, 2026
fa77612
chore(release): Publish
walter-harriman-bot Mar 3, 2026
f975e2c
fix(components): Revert "Fix DatePickers rendering inside Modals (#29…
Aiden-Brine Mar 3, 2026
8e79d01
chore(release): Publish
walter-harriman-bot Mar 3, 2026
71313c0
fix(components-native): Fix styling of checkbox [JOB-152492] (#2936)
Aiden-Brine Mar 3, 2026
84d03f2
chore(release): Publish
walter-harriman-bot Mar 3, 2026
80237bf
title prop optional + add render logic to header
chris-at-jobber Mar 3, 2026
c616587
fix(components): Fix DatePickers rendering inside Modals (#2944)
Aiden-Brine Mar 5, 2026
1d8d5a3
chore(release): Publish
walter-harriman-bot Mar 5, 2026
4cce232
fix(components): Fix autocomplete crashing on resize larger [JOB-1518…
Aiden-Brine Mar 5, 2026
73ea7d2
chore(release): Publish
walter-harriman-bot Mar 5, 2026
619bf09
chore(release): Manual release (#2949)
Aiden-Brine Mar 5, 2026
baa7f15
chore(release): Publish
walter-harriman-bot Mar 5, 2026
dfca522
chore(release): Manual release (#2950)
jdeichert Mar 5, 2026
a74e0a0
chore(release): Publish
walter-harriman-bot Mar 6, 2026
a820a86
revert(components): Clearable Positioning Logic (#2952)
ZakaryH Mar 6, 2026
f3ee342
chore(release): Publish
walter-harriman-bot Mar 6, 2026
1cd5f08
update props json for docs site
chris-at-jobber Mar 6, 2026
6a89642
Merge branch 'master' into make-title-optional-in-contentoverlay
chris-at-jobber Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
223 changes: 223 additions & 0 deletions .claude/skills/migrate-stories/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
---
# README
# This skill can be run via Claude Code or any IDEs that support Claude Skills (Cursor).
# To run this skill, simply type `/migrate-stories [componentName]`
#
# Claude Code Permissions
# By default it will ask you for each command it needs to run. It's up to you to determine
# whether to allow those commands and whether to run them by default in the future.
name: migrate-stories
description: Migrates storybook stories from v7 to v9.
argument-hint: "[componentName]"
context: fork
disable-model-invocation: true
---

## Important Context

Throughout this document, "SomeComponentName" is used as a placeholder. Always
replace it with $ARGUMENTS which is the component we're focused on migrating
today.

## Background

We currently have 3 instances of storybook:

- Storybook v7 (old)
- These live under `docs/components/SomeComponentName`
- Storybook v9 web
- These live under `packages/components/src/SomeComponentName`
- Storybook v9 mobile
- These live under `packages/components-native/src/SomeComponentName`

## The Goal

We're in the process of migrating old v7 stories to the new web/mobile v9
storybook instances.

Your job today is to follow the instructions below and migrate stories from v7
to their respective web and/or mobile v9 instances. Do the tasks in the order
they are defined in.

Do NOT run test suites or execute npm commands. Just do the changes and I'll QA
after that.

## Tasks

### Move stories

Each component has web and/or mobile stories. They live under
`docs/components/SomeComponentName`. Web stories are named `Web.stories.tsx` and
mobile stories are named `Mobile.stories.tsx`. Sometimes you may come across
files like `WebV2`, those are also web stories.

For web stories: move the component's `Web.stories.tsx` file to its v9
directory.

For mobile stories: move the component's `Mobile.stories.tsx` file to its v9
directory.

**IMPORTANT:** In both cases, you must rename the file to follow this format:
`SomeComponentName.stories.tsx`. You also may come across files that are
imported by the stories, and in that case you should move those files to their
respective v9 directories as well.

**IMPORTANT:** Only move the files, DO NOT make any modifications at this stage.
After moving the files, make a git commit to the current branch for that.

### Modernizing stories

After moving the stories, you'll need to modernize them. Here's a couple things
below you'll need to change. If you get stuck or confused, refer to
@packages/components/src/Autocomplete/Autocomplete.stories.tsx which is a v9
example that works.

After you make these changes, commit them with details about what you had to
change and why if necessary.

1. Update imports for v9

Before:

```tsx
import type { ComponentMeta, ComponentStory } from "@storybook/react";
```

After:

```tsx
import type { Meta, StoryObj } from "@storybook/react-vite";
```

2. Update how meta is exported

Before:

```tsx
export default {
title: "Components/Actions/SomeComponentName/Web",
component: SomeComponentName,
parameters: {
viewMode: "story",
previewTabs: { code: { hidden: false } },
},
decorators: [
// Workaround Storybook's wrapping flex parent that make everything full width
story => <div>{story()}</div>,
],
} as ComponentMeta<typeof SomeComponentName>;
```

After:

```tsx
// NOTE: the comments are for context, do not add these.
const meta = {
// Removed the /Web or /Mobile path part
title: "Components/Actions/SomeComponentName",
component: SomeComponentName,
// Removed parameters that were unnecessary in this case. Always remove previewTabs.
// Removed decorators that were unnecessary in this case.
} satisfies Meta<typeof SomeComponentName>;
export default meta;
type Story = StoryObj<typeof meta>;
```

3. Update story definition

Only update the way the story is defined. DO NOT update the contents of any
story.

Before:

```tsx
export const SomeExample = SomeExampleTemplate.bind({});

const SomeExampleTemplate: ComponentStory<typeof SomeComponentName> = args => (
<div>Example...</div>
);
```

After:

```tsx
export const SomeExample: Story = {
render: SomeExampleTemplate,
};

// NOTE: make sure to remove any references to ComponentStory or ComponentMeta
const SomeExampleTemplate = (args: Story["args"]) => <div>Example...</div>;
```

### Update new docs site links

Our new docs site has a config file for each component. The config locations
follow this format: `packages/site/src/content/SomeComponentName/index.tsx`.

You need to update the `links` section for this component with the new storybook
link(s) for web and/or mobile. See @packages/site/src/content/Button/index.tsx
for an example of what this should look like.

**IMPORTANT:** Only link to Web if you migrated web stories, and only link to
Mobile if you migrated mobile stories. Some components only have one or the
other.

Before:

```ts
links: [
{
label: "Storybook",
url: getStorybookUrl("?path=/docs/components-example-somecomponentname--docs"),
},
],
```

After:

```ts
links: [
{
label: "Web Storybook",
type: "web",
url: getStorybookUrl(
"?path=/story/components-example-somecomponentname--basic",
"web",
),
},
{
label: "Mobile Storybook",
type: "mobile",
url: getStorybookUrl(
"?path=/story/components-example-somecomponentname--basic",
"mobile",
),
},
],
```

### Update old docs page

Each component has a docs page that our v7 storybook uses.

The filename is in this format:
`docs/components/SomeComponentName/SomeComponentName.stories.mdx`

You need to update this file to point to the new v9 storybook locations. See the
snippet below, you need to replace `NEW-V9-WEB-PATH` and/or `NEW-V9-MOBILE-PATH`
with the actual storybook paths that are expected.

**IMPORTANT:** Only link to Web if you migrated web stories, and only link to
Mobile if you migrated mobile stories. Some components only have one or the
other.

```md
[Web](https://atlantis.getjobber.com/storybook/web/?path=/story/NEW-V9-WEB-PATH)
and
[Mobile](https://atlantis.getjobber.com/storybook/mobile/?path=/story/NEW-V9-MOBILE-PATH)
stories have moved to Storybook v9.
```

See @docs/components/Button/Button.stories.mdx for an example of what this looks
like. Note the paths are determined by the `title` field exported from the
stories, using lowercase letters and dashes instead of slashes.
6 changes: 5 additions & 1 deletion docs/components/Autocomplete/Autocomplete.stories.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ import { Meta } from "@storybook/addon-docs";

# Autocomplete

[Autocomplete docs](https://atlantis.getjobber.com/components/Autocomplete) have moved to the new site.
[Autocomplete docs](https://atlantis.getjobber.com/components/Autocomplete) have
moved to the new site.

[Web](https://atlantis.getjobber.com/storybook/web/?path=/story/components-forms-and-inputs-autocomplete--basic)
stories have moved to Storybook v9.
2 changes: 1 addition & 1 deletion docs/components/Avatar/Web.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const TooltipTemplate: ComponentStory<typeof Avatar> = args => (

export const Basic = BasicTemplate.bind({});
Basic.args = {
color: "var(--color-indigo)",
color: "var(--color-green)",
imageUrl:
"https://images.unsplash.com/photo-1533858539156-90ea20bafd17?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80",
initials: "JBLR",
Expand Down
Loading