@plasmicpkgs/react-aria 0.0.103 → 0.0.105
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/react-aria.esm.js.map +1 -1
- package/dist/react-aria.js.map +1 -1
- package/dist/registerButton.d.ts +1 -1
- package/dist/registerComboBox.d.ts +2 -2
- package/dist/registerDialogTrigger.d.ts +3 -3
- package/dist/registerModal.d.ts +3 -4
- package/dist/registerPopover.d.ts +2 -2
- package/dist/registerSelect.d.ts +2 -2
- package/dist/registerSliderTrack.d.ts +1 -1
- package/dist/registerTooltip.d.ts +2 -2
- package/dist/utils.d.ts +6 -0
- package/package.json +13 -3
- package/skinny/registerButton.cjs.js.map +1 -1
- package/skinny/registerButton.d.ts +1 -1
- package/skinny/registerButton.esm.js.map +1 -1
- package/skinny/registerButton.stories.cjs.js +163 -0
- package/skinny/registerButton.stories.cjs.js.map +1 -0
- package/skinny/registerButton.stories.esm.js +149 -0
- package/skinny/registerButton.stories.esm.js.map +1 -0
- package/skinny/registerCheckboxGroup.stories.cjs.js +121 -0
- package/skinny/registerCheckboxGroup.stories.cjs.js.map +1 -0
- package/skinny/registerCheckboxGroup.stories.esm.js +109 -0
- package/skinny/registerCheckboxGroup.stories.esm.js.map +1 -0
- package/skinny/registerComboBox.cjs.js.map +1 -1
- package/skinny/registerComboBox.d.ts +2 -2
- package/skinny/registerComboBox.esm.js +1 -1
- package/skinny/registerComboBox.esm.js.map +1 -1
- package/skinny/registerComboBox.stories.cjs.js +244 -0
- package/skinny/registerComboBox.stories.cjs.js.map +1 -0
- package/skinny/registerComboBox.stories.esm.js +230 -0
- package/skinny/registerComboBox.stories.esm.js.map +1 -0
- package/skinny/registerDialogTrigger.cjs.js.map +1 -1
- package/skinny/registerDialogTrigger.d.ts +3 -3
- package/skinny/registerDialogTrigger.esm.js.map +1 -1
- package/skinny/registerDialogTrigger.stories.cjs.js +233 -0
- package/skinny/registerDialogTrigger.stories.cjs.js.map +1 -0
- package/skinny/registerDialogTrigger.stories.esm.js +221 -0
- package/skinny/registerDialogTrigger.stories.esm.js.map +1 -0
- package/skinny/{registerListBox-40846430.esm.js → registerListBox-49626f55.esm.js} +2 -2
- package/skinny/{registerListBox-40846430.esm.js.map → registerListBox-49626f55.esm.js.map} +1 -1
- package/skinny/registerListBox.esm.js +1 -1
- package/skinny/registerListbox.stories.cjs.js +219 -0
- package/skinny/registerListbox.stories.cjs.js.map +1 -0
- package/skinny/registerListbox.stories.esm.js +206 -0
- package/skinny/registerListbox.stories.esm.js.map +1 -0
- package/skinny/registerModal.cjs.js.map +1 -1
- package/skinny/registerModal.d.ts +3 -4
- package/skinny/registerModal.esm.js.map +1 -1
- package/skinny/registerModal.stories.cjs.js +194 -0
- package/skinny/registerModal.stories.cjs.js.map +1 -0
- package/skinny/registerModal.stories.esm.js +181 -0
- package/skinny/registerModal.stories.esm.js.map +1 -0
- package/skinny/registerPopover.cjs.js.map +1 -1
- package/skinny/registerPopover.d.ts +2 -2
- package/skinny/registerPopover.esm.js.map +1 -1
- package/skinny/registerPopover.stories.cjs.js +42 -0
- package/skinny/registerPopover.stories.cjs.js.map +1 -0
- package/skinny/registerPopover.stories.esm.js +33 -0
- package/skinny/registerPopover.stories.esm.js.map +1 -0
- package/skinny/registerRadioGroup.stories.cjs.js +120 -0
- package/skinny/registerRadioGroup.stories.cjs.js.map +1 -0
- package/skinny/registerRadioGroup.stories.esm.js +108 -0
- package/skinny/registerRadioGroup.stories.esm.js.map +1 -0
- package/skinny/registerSection.esm.js +1 -1
- package/skinny/registerSelect.cjs.js.map +1 -1
- package/skinny/registerSelect.d.ts +2 -2
- package/skinny/registerSelect.esm.js +1 -1
- package/skinny/registerSelect.esm.js.map +1 -1
- package/skinny/registerSelect.stories.cjs.js +176 -0
- package/skinny/registerSelect.stories.cjs.js.map +1 -0
- package/skinny/registerSelect.stories.esm.js +165 -0
- package/skinny/registerSelect.stories.esm.js.map +1 -0
- package/skinny/registerSlider.stories.cjs.js +184 -0
- package/skinny/registerSlider.stories.cjs.js.map +1 -0
- package/skinny/registerSlider.stories.esm.js +171 -0
- package/skinny/registerSlider.stories.esm.js.map +1 -0
- package/skinny/registerSliderTrack.cjs.js.map +1 -1
- package/skinny/registerSliderTrack.d.ts +1 -1
- package/skinny/registerSliderTrack.esm.js.map +1 -1
- package/skinny/registerTextField.cjs.js +1 -1
- package/skinny/registerTextField.esm.js +1 -1
- package/skinny/registerTooltip.cjs.js.map +1 -1
- package/skinny/registerTooltip.d.ts +2 -2
- package/skinny/registerTooltip.esm.js.map +1 -1
- package/skinny/registerTooltip.stories.cjs.js +228 -0
- package/skinny/registerTooltip.stories.cjs.js.map +1 -0
- package/skinny/registerTooltip.stories.esm.js +215 -0
- package/skinny/registerTooltip.stories.esm.js.map +1 -0
- package/skinny/utils-5d1b4c6b.esm.js.map +1 -1
- package/skinny/utils-7d000fa4.cjs.js.map +1 -1
- package/skinny/utils.d.ts +6 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var host = require('@plasmicapp/host');
|
|
6
|
+
var test = require('@storybook/test');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var registerModal = require('./registerModal.cjs.js');
|
|
9
|
+
require('react-aria');
|
|
10
|
+
require('react-aria-components');
|
|
11
|
+
require('./common-b3b54c72.cjs.js');
|
|
12
|
+
require('./utils-7d000fa4.cjs.js');
|
|
13
|
+
require('@plasmicapp/host/registerComponent');
|
|
14
|
+
require('./contexts-6d0cb2b1.cjs.js');
|
|
15
|
+
|
|
16
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
|
|
18
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
19
|
+
|
|
20
|
+
var __defProp = Object.defineProperty;
|
|
21
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
22
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
23
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
24
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
25
|
+
var __spreadValues = (a, b) => {
|
|
26
|
+
for (var prop in b || (b = {}))
|
|
27
|
+
if (__hasOwnProp.call(b, prop))
|
|
28
|
+
__defNormalProp(a, prop, b[prop]);
|
|
29
|
+
if (__getOwnPropSymbols)
|
|
30
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
31
|
+
if (__propIsEnum.call(b, prop))
|
|
32
|
+
__defNormalProp(a, prop, b[prop]);
|
|
33
|
+
}
|
|
34
|
+
return a;
|
|
35
|
+
};
|
|
36
|
+
var __objRest = (source, exclude) => {
|
|
37
|
+
var target = {};
|
|
38
|
+
for (var prop in source)
|
|
39
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
40
|
+
target[prop] = source[prop];
|
|
41
|
+
if (source != null && __getOwnPropSymbols)
|
|
42
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
43
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
44
|
+
target[prop] = source[prop];
|
|
45
|
+
}
|
|
46
|
+
return target;
|
|
47
|
+
};
|
|
48
|
+
const meta = {
|
|
49
|
+
title: "Components/BaseModal",
|
|
50
|
+
component: registerModal.BaseModal,
|
|
51
|
+
args: {
|
|
52
|
+
onOpenChange: test.fn(),
|
|
53
|
+
children: /* @__PURE__ */ React__default.default.createElement("div", { "data-testid": "modal-content" }, /* @__PURE__ */ React__default.default.createElement("h2", null, "Modal Title"), /* @__PURE__ */ React__default.default.createElement("p", null, "Modal content goes here"))
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const Basic = {
|
|
57
|
+
args: {
|
|
58
|
+
isOpen: true,
|
|
59
|
+
isDismissable: true
|
|
60
|
+
},
|
|
61
|
+
play: async ({ args }) => {
|
|
62
|
+
const doc = test.within(document.body);
|
|
63
|
+
const modal = doc.getByTestId("modal-content");
|
|
64
|
+
test.expect(modal).toBeInTheDocument();
|
|
65
|
+
test.expect(modal).toBeVisible();
|
|
66
|
+
await test.userEvent.click(document.body);
|
|
67
|
+
test.expect(args.onOpenChange).toHaveBeenCalledWith(false);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const NonDismissable = {
|
|
71
|
+
args: {
|
|
72
|
+
isOpen: true,
|
|
73
|
+
isDismissable: false
|
|
74
|
+
},
|
|
75
|
+
play: async ({ args }) => {
|
|
76
|
+
const doc = test.within(document.body);
|
|
77
|
+
const modal = doc.getByTestId("modal-content");
|
|
78
|
+
test.expect(modal).toBeInTheDocument();
|
|
79
|
+
test.expect(modal).toBeVisible();
|
|
80
|
+
await test.userEvent.click(document.body);
|
|
81
|
+
test.expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
82
|
+
test.expect(modal).toBeInTheDocument();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const KeyboardDismissDisabled = {
|
|
86
|
+
args: {
|
|
87
|
+
isOpen: true,
|
|
88
|
+
isDismissable: true,
|
|
89
|
+
isKeyboardDismissDisabled: true
|
|
90
|
+
},
|
|
91
|
+
play: async ({ args }) => {
|
|
92
|
+
const doc = test.within(document.body);
|
|
93
|
+
const modal = doc.getByTestId("modal-content");
|
|
94
|
+
test.expect(modal).toBeInTheDocument();
|
|
95
|
+
await test.userEvent.keyboard("{Escape}");
|
|
96
|
+
test.expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
97
|
+
test.expect(modal).toBeInTheDocument();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const ImperativeControl = {
|
|
101
|
+
render: (_a) => {
|
|
102
|
+
var _b = _a, { onOpenChange } = _b, args = __objRest(_b, ["onOpenChange"]);
|
|
103
|
+
const modalRef = React__default.default.useRef(
|
|
104
|
+
null
|
|
105
|
+
);
|
|
106
|
+
const [open, setOpen] = React.useState(true);
|
|
107
|
+
return /* @__PURE__ */ React__default.default.createElement("div", null, /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => {
|
|
108
|
+
var _a2;
|
|
109
|
+
return (_a2 = modalRef.current) == null ? void 0 : _a2.open();
|
|
110
|
+
} }, "Open Modal"), /* @__PURE__ */ React__default.default.createElement(
|
|
111
|
+
registerModal.BaseModal,
|
|
112
|
+
__spreadValues({
|
|
113
|
+
isOpen: open,
|
|
114
|
+
onOpenChange: (newValue) => {
|
|
115
|
+
onOpenChange == null ? void 0 : onOpenChange(newValue);
|
|
116
|
+
setOpen(newValue);
|
|
117
|
+
},
|
|
118
|
+
ref: modalRef
|
|
119
|
+
}, args),
|
|
120
|
+
/* @__PURE__ */ React__default.default.createElement("div", { "data-testid": "modal-content" }, /* @__PURE__ */ React__default.default.createElement("h2", null, "Test Modal"), /* @__PURE__ */ React__default.default.createElement("button", { onClick: () => {
|
|
121
|
+
var _a2;
|
|
122
|
+
return (_a2 = modalRef.current) == null ? void 0 : _a2.close();
|
|
123
|
+
} }, "Close Modal"))
|
|
124
|
+
));
|
|
125
|
+
},
|
|
126
|
+
play: async ({ canvasElement }) => {
|
|
127
|
+
const doc = test.within(document.body);
|
|
128
|
+
const canvas = test.within(canvasElement);
|
|
129
|
+
await test.waitFor(() => {
|
|
130
|
+
test.expect(doc.getByTestId("modal-content")).toBeInTheDocument();
|
|
131
|
+
});
|
|
132
|
+
const closeButton = doc.getByText("Close Modal");
|
|
133
|
+
await test.userEvent.click(closeButton);
|
|
134
|
+
await test.waitFor(() => {
|
|
135
|
+
test.expect(doc.queryByTestId("modal-content")).not.toBeInTheDocument();
|
|
136
|
+
});
|
|
137
|
+
const openButton = canvas.getByText("Open Modal");
|
|
138
|
+
await test.userEvent.click(openButton);
|
|
139
|
+
await test.waitFor(() => {
|
|
140
|
+
test.expect(doc.getByTestId("modal-content")).toBeInTheDocument();
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const SelectedInCanvas = {
|
|
145
|
+
render: (_c) => {
|
|
146
|
+
var _d = _c, args = __objRest(_d, ["__plasmic_selection_prop__"]);
|
|
147
|
+
const [selected, setSelected] = React.useState(false);
|
|
148
|
+
React.useEffect(() => {
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
setSelected(true);
|
|
151
|
+
}, 1e3);
|
|
152
|
+
}, []);
|
|
153
|
+
return (
|
|
154
|
+
// Simulate Plasmic canvas envirnment
|
|
155
|
+
/* @__PURE__ */ React__default.default.createElement(
|
|
156
|
+
host.PlasmicCanvasContext.Provider,
|
|
157
|
+
{
|
|
158
|
+
value: {
|
|
159
|
+
componentName: "test",
|
|
160
|
+
globalVariants: {}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
/* @__PURE__ */ React__default.default.createElement(
|
|
164
|
+
registerModal.BaseModal,
|
|
165
|
+
__spreadValues({
|
|
166
|
+
__plasmic_selection_prop__: {
|
|
167
|
+
isSelected: selected
|
|
168
|
+
}
|
|
169
|
+
}, args)
|
|
170
|
+
)
|
|
171
|
+
)
|
|
172
|
+
);
|
|
173
|
+
},
|
|
174
|
+
play: async () => {
|
|
175
|
+
const doc = test.within(document.body);
|
|
176
|
+
await test.waitFor(() => {
|
|
177
|
+
test.expect(doc.queryByTestId("modal-content")).not.toBeInTheDocument();
|
|
178
|
+
});
|
|
179
|
+
await test.waitFor(
|
|
180
|
+
() => {
|
|
181
|
+
test.expect(doc.queryByTestId("modal-content")).toBeInTheDocument();
|
|
182
|
+
},
|
|
183
|
+
{ timeout: 1100 }
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.Basic = Basic;
|
|
189
|
+
exports.ImperativeControl = ImperativeControl;
|
|
190
|
+
exports.KeyboardDismissDisabled = KeyboardDismissDisabled;
|
|
191
|
+
exports.NonDismissable = NonDismissable;
|
|
192
|
+
exports.SelectedInCanvas = SelectedInCanvas;
|
|
193
|
+
exports.default = meta;
|
|
194
|
+
//# sourceMappingURL=registerModal.stories.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerModal.stories.cjs.js","sources":["../src/registerModal.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseModal } from \"./registerModal\";\n\nconst meta: Meta<typeof BaseModal> = {\n title: \"Components/BaseModal\",\n component: BaseModal,\n\n args: {\n onOpenChange: fn(),\n children: (\n <div data-testid=\"modal-content\">\n <h2>Modal Title</h2>\n <p>Modal content goes here</p>\n </div>\n ),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseModal>;\n\nexport const Basic: Story = {\n args: {\n isOpen: true,\n isDismissable: true,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n expect(modal).toBeVisible();\n\n // Click outside to dismiss\n await userEvent.click(document.body);\n expect(args.onOpenChange).toHaveBeenCalledWith(false);\n },\n};\n\nexport const NonDismissable: Story = {\n args: {\n isOpen: true,\n isDismissable: false,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n expect(modal).toBeVisible();\n\n // Click outside should not dismiss\n await userEvent.click(document.body);\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(modal).toBeInTheDocument();\n },\n};\n\nexport const KeyboardDismissDisabled: Story = {\n args: {\n isOpen: true,\n isDismissable: true,\n isKeyboardDismissDisabled: true,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n\n // Press Escape should not dismiss\n await userEvent.keyboard(\"{Escape}\");\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(modal).toBeInTheDocument();\n },\n};\n\nexport const ImperativeControl: Story = {\n render: ({ onOpenChange, ...args }) => {\n const modalRef = React.useRef<{ close: () => void; open: () => void }>(\n null\n );\n const [open, setOpen] = useState(true);\n\n return (\n <div>\n <button onClick={() => modalRef.current?.open()}>Open Modal</button>\n\n <BaseModal\n isOpen={open}\n onOpenChange={(newValue) => {\n onOpenChange?.(newValue);\n setOpen(newValue);\n }}\n ref={modalRef}\n {...args}\n >\n <div data-testid=\"modal-content\">\n <h2>Test Modal</h2>\n\n <button onClick={() => modalRef.current?.close()}>\n Close Modal\n </button>\n </div>\n </BaseModal>\n </div>\n );\n },\n play: async ({ canvasElement }) => {\n const doc = within(document.body);\n const canvas = within(canvasElement);\n\n await waitFor(() => {\n expect(doc.getByTestId(\"modal-content\")).toBeInTheDocument();\n });\n\n // Find and click the close button\n const closeButton = doc.getByText(\"Close Modal\");\n await userEvent.click(closeButton);\n\n // Modal should be closed\n await waitFor(() => {\n expect(doc.queryByTestId(\"modal-content\")).not.toBeInTheDocument();\n });\n\n // Find and click the open button\n const openButton = canvas.getByText(\"Open Modal\");\n await userEvent.click(openButton);\n\n // Modal should be open again\n await waitFor(() => {\n expect(doc.getByTestId(\"modal-content\")).toBeInTheDocument();\n });\n },\n};\n\nexport const SelectedInCanvas: Story = {\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseModal\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"modal-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"modal-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":["BaseModal","fn","React","within","expect","userEvent","useState","_a","waitFor","useEffect","PlasmicCanvasContext"],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { PlasmicCanvasContext } from '@plasmicapp/host';
|
|
2
|
+
import { fn, within, expect, userEvent, waitFor } from '@storybook/test';
|
|
3
|
+
import React, { useState, useEffect } from 'react';
|
|
4
|
+
import { BaseModal } from './registerModal.esm.js';
|
|
5
|
+
import 'react-aria';
|
|
6
|
+
import 'react-aria-components';
|
|
7
|
+
import './common-ceebbaea.esm.js';
|
|
8
|
+
import './utils-5d1b4c6b.esm.js';
|
|
9
|
+
import '@plasmicapp/host/registerComponent';
|
|
10
|
+
import './contexts-5cb81c2f.esm.js';
|
|
11
|
+
|
|
12
|
+
var __defProp = Object.defineProperty;
|
|
13
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
14
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
16
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
|
+
var __spreadValues = (a, b) => {
|
|
18
|
+
for (var prop in b || (b = {}))
|
|
19
|
+
if (__hasOwnProp.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
if (__getOwnPropSymbols)
|
|
22
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
23
|
+
if (__propIsEnum.call(b, prop))
|
|
24
|
+
__defNormalProp(a, prop, b[prop]);
|
|
25
|
+
}
|
|
26
|
+
return a;
|
|
27
|
+
};
|
|
28
|
+
var __objRest = (source, exclude) => {
|
|
29
|
+
var target = {};
|
|
30
|
+
for (var prop in source)
|
|
31
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
32
|
+
target[prop] = source[prop];
|
|
33
|
+
if (source != null && __getOwnPropSymbols)
|
|
34
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
35
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
36
|
+
target[prop] = source[prop];
|
|
37
|
+
}
|
|
38
|
+
return target;
|
|
39
|
+
};
|
|
40
|
+
const meta = {
|
|
41
|
+
title: "Components/BaseModal",
|
|
42
|
+
component: BaseModal,
|
|
43
|
+
args: {
|
|
44
|
+
onOpenChange: fn(),
|
|
45
|
+
children: /* @__PURE__ */ React.createElement("div", { "data-testid": "modal-content" }, /* @__PURE__ */ React.createElement("h2", null, "Modal Title"), /* @__PURE__ */ React.createElement("p", null, "Modal content goes here"))
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const Basic = {
|
|
49
|
+
args: {
|
|
50
|
+
isOpen: true,
|
|
51
|
+
isDismissable: true
|
|
52
|
+
},
|
|
53
|
+
play: async ({ args }) => {
|
|
54
|
+
const doc = within(document.body);
|
|
55
|
+
const modal = doc.getByTestId("modal-content");
|
|
56
|
+
expect(modal).toBeInTheDocument();
|
|
57
|
+
expect(modal).toBeVisible();
|
|
58
|
+
await userEvent.click(document.body);
|
|
59
|
+
expect(args.onOpenChange).toHaveBeenCalledWith(false);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const NonDismissable = {
|
|
63
|
+
args: {
|
|
64
|
+
isOpen: true,
|
|
65
|
+
isDismissable: false
|
|
66
|
+
},
|
|
67
|
+
play: async ({ args }) => {
|
|
68
|
+
const doc = within(document.body);
|
|
69
|
+
const modal = doc.getByTestId("modal-content");
|
|
70
|
+
expect(modal).toBeInTheDocument();
|
|
71
|
+
expect(modal).toBeVisible();
|
|
72
|
+
await userEvent.click(document.body);
|
|
73
|
+
expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
74
|
+
expect(modal).toBeInTheDocument();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const KeyboardDismissDisabled = {
|
|
78
|
+
args: {
|
|
79
|
+
isOpen: true,
|
|
80
|
+
isDismissable: true,
|
|
81
|
+
isKeyboardDismissDisabled: true
|
|
82
|
+
},
|
|
83
|
+
play: async ({ args }) => {
|
|
84
|
+
const doc = within(document.body);
|
|
85
|
+
const modal = doc.getByTestId("modal-content");
|
|
86
|
+
expect(modal).toBeInTheDocument();
|
|
87
|
+
await userEvent.keyboard("{Escape}");
|
|
88
|
+
expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
89
|
+
expect(modal).toBeInTheDocument();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const ImperativeControl = {
|
|
93
|
+
render: (_a) => {
|
|
94
|
+
var _b = _a, { onOpenChange } = _b, args = __objRest(_b, ["onOpenChange"]);
|
|
95
|
+
const modalRef = React.useRef(
|
|
96
|
+
null
|
|
97
|
+
);
|
|
98
|
+
const [open, setOpen] = useState(true);
|
|
99
|
+
return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
100
|
+
var _a2;
|
|
101
|
+
return (_a2 = modalRef.current) == null ? void 0 : _a2.open();
|
|
102
|
+
} }, "Open Modal"), /* @__PURE__ */ React.createElement(
|
|
103
|
+
BaseModal,
|
|
104
|
+
__spreadValues({
|
|
105
|
+
isOpen: open,
|
|
106
|
+
onOpenChange: (newValue) => {
|
|
107
|
+
onOpenChange == null ? void 0 : onOpenChange(newValue);
|
|
108
|
+
setOpen(newValue);
|
|
109
|
+
},
|
|
110
|
+
ref: modalRef
|
|
111
|
+
}, args),
|
|
112
|
+
/* @__PURE__ */ React.createElement("div", { "data-testid": "modal-content" }, /* @__PURE__ */ React.createElement("h2", null, "Test Modal"), /* @__PURE__ */ React.createElement("button", { onClick: () => {
|
|
113
|
+
var _a2;
|
|
114
|
+
return (_a2 = modalRef.current) == null ? void 0 : _a2.close();
|
|
115
|
+
} }, "Close Modal"))
|
|
116
|
+
));
|
|
117
|
+
},
|
|
118
|
+
play: async ({ canvasElement }) => {
|
|
119
|
+
const doc = within(document.body);
|
|
120
|
+
const canvas = within(canvasElement);
|
|
121
|
+
await waitFor(() => {
|
|
122
|
+
expect(doc.getByTestId("modal-content")).toBeInTheDocument();
|
|
123
|
+
});
|
|
124
|
+
const closeButton = doc.getByText("Close Modal");
|
|
125
|
+
await userEvent.click(closeButton);
|
|
126
|
+
await waitFor(() => {
|
|
127
|
+
expect(doc.queryByTestId("modal-content")).not.toBeInTheDocument();
|
|
128
|
+
});
|
|
129
|
+
const openButton = canvas.getByText("Open Modal");
|
|
130
|
+
await userEvent.click(openButton);
|
|
131
|
+
await waitFor(() => {
|
|
132
|
+
expect(doc.getByTestId("modal-content")).toBeInTheDocument();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const SelectedInCanvas = {
|
|
137
|
+
render: (_c) => {
|
|
138
|
+
var _d = _c, args = __objRest(_d, ["__plasmic_selection_prop__"]);
|
|
139
|
+
const [selected, setSelected] = useState(false);
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
setSelected(true);
|
|
143
|
+
}, 1e3);
|
|
144
|
+
}, []);
|
|
145
|
+
return (
|
|
146
|
+
// Simulate Plasmic canvas envirnment
|
|
147
|
+
/* @__PURE__ */ React.createElement(
|
|
148
|
+
PlasmicCanvasContext.Provider,
|
|
149
|
+
{
|
|
150
|
+
value: {
|
|
151
|
+
componentName: "test",
|
|
152
|
+
globalVariants: {}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
/* @__PURE__ */ React.createElement(
|
|
156
|
+
BaseModal,
|
|
157
|
+
__spreadValues({
|
|
158
|
+
__plasmic_selection_prop__: {
|
|
159
|
+
isSelected: selected
|
|
160
|
+
}
|
|
161
|
+
}, args)
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
);
|
|
165
|
+
},
|
|
166
|
+
play: async () => {
|
|
167
|
+
const doc = within(document.body);
|
|
168
|
+
await waitFor(() => {
|
|
169
|
+
expect(doc.queryByTestId("modal-content")).not.toBeInTheDocument();
|
|
170
|
+
});
|
|
171
|
+
await waitFor(
|
|
172
|
+
() => {
|
|
173
|
+
expect(doc.queryByTestId("modal-content")).toBeInTheDocument();
|
|
174
|
+
},
|
|
175
|
+
{ timeout: 1100 }
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export { Basic, ImperativeControl, KeyboardDismissDisabled, NonDismissable, SelectedInCanvas, meta as default };
|
|
181
|
+
//# sourceMappingURL=registerModal.stories.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerModal.stories.esm.js","sources":["../src/registerModal.stories.tsx"],"sourcesContent":["import { PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React, { useEffect, useState } from \"react\";\nimport { BaseModal } from \"./registerModal\";\n\nconst meta: Meta<typeof BaseModal> = {\n title: \"Components/BaseModal\",\n component: BaseModal,\n\n args: {\n onOpenChange: fn(),\n children: (\n <div data-testid=\"modal-content\">\n <h2>Modal Title</h2>\n <p>Modal content goes here</p>\n </div>\n ),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BaseModal>;\n\nexport const Basic: Story = {\n args: {\n isOpen: true,\n isDismissable: true,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n expect(modal).toBeVisible();\n\n // Click outside to dismiss\n await userEvent.click(document.body);\n expect(args.onOpenChange).toHaveBeenCalledWith(false);\n },\n};\n\nexport const NonDismissable: Story = {\n args: {\n isOpen: true,\n isDismissable: false,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n expect(modal).toBeVisible();\n\n // Click outside should not dismiss\n await userEvent.click(document.body);\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(modal).toBeInTheDocument();\n },\n};\n\nexport const KeyboardDismissDisabled: Story = {\n args: {\n isOpen: true,\n isDismissable: true,\n isKeyboardDismissDisabled: true,\n },\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Modal should be visible\n const modal = doc.getByTestId(\"modal-content\");\n expect(modal).toBeInTheDocument();\n\n // Press Escape should not dismiss\n await userEvent.keyboard(\"{Escape}\");\n expect(args.onOpenChange).not.toHaveBeenCalled();\n expect(modal).toBeInTheDocument();\n },\n};\n\nexport const ImperativeControl: Story = {\n render: ({ onOpenChange, ...args }) => {\n const modalRef = React.useRef<{ close: () => void; open: () => void }>(\n null\n );\n const [open, setOpen] = useState(true);\n\n return (\n <div>\n <button onClick={() => modalRef.current?.open()}>Open Modal</button>\n\n <BaseModal\n isOpen={open}\n onOpenChange={(newValue) => {\n onOpenChange?.(newValue);\n setOpen(newValue);\n }}\n ref={modalRef}\n {...args}\n >\n <div data-testid=\"modal-content\">\n <h2>Test Modal</h2>\n\n <button onClick={() => modalRef.current?.close()}>\n Close Modal\n </button>\n </div>\n </BaseModal>\n </div>\n );\n },\n play: async ({ canvasElement }) => {\n const doc = within(document.body);\n const canvas = within(canvasElement);\n\n await waitFor(() => {\n expect(doc.getByTestId(\"modal-content\")).toBeInTheDocument();\n });\n\n // Find and click the close button\n const closeButton = doc.getByText(\"Close Modal\");\n await userEvent.click(closeButton);\n\n // Modal should be closed\n await waitFor(() => {\n expect(doc.queryByTestId(\"modal-content\")).not.toBeInTheDocument();\n });\n\n // Find and click the open button\n const openButton = canvas.getByText(\"Open Modal\");\n await userEvent.click(openButton);\n\n // Modal should be open again\n await waitFor(() => {\n expect(doc.getByTestId(\"modal-content\")).toBeInTheDocument();\n });\n },\n};\n\nexport const SelectedInCanvas: Story = {\n render: ({ __plasmic_selection_prop__, ...args }) => {\n const [selected, setSelected] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setSelected(true);\n }, 1000);\n }, []);\n\n return (\n // Simulate Plasmic canvas envirnment\n <PlasmicCanvasContext.Provider\n value={{\n componentName: \"test\",\n globalVariants: {},\n }}\n >\n <BaseModal\n // Simulate node selection in Plasmic canvas\n __plasmic_selection_prop__={{\n isSelected: selected,\n }}\n {...args}\n />\n </PlasmicCanvasContext.Provider>\n );\n },\n play: async () => {\n // popovers are rendered outside canvas, so we need to use document.body\n const doc = within(document.body);\n\n await waitFor(() => {\n expect(doc.queryByTestId(\"modal-content\")).not.toBeInTheDocument();\n });\n\n await waitFor(\n () => {\n expect(doc.queryByTestId(\"modal-content\")).toBeInTheDocument();\n },\n { timeout: 1100 }\n );\n },\n};\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerPopover.cjs.js","sources":["../src/registerPopover.tsx"],"sourcesContent":["import { usePlasmicCanvasContext } from \"@plasmicapp/host\";\nimport { mergeProps } from \"@react-aria/utils\";\nimport React, { useEffect } from \"react\";\nimport { Popover, PopoverContext } from \"react-aria-components\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport { PlasmicPopoverTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n/*\n NOTE: Placement should be managed as variants, not just props.\n When `shouldFlip` is true, the placement prop may not represent the final position\n (e.g., if placement is set to \"bottom\" but lacks space, the popover may flip to \"top\").\n However, data-selectors will consistently indicate the actual placement of the popover.\n */\nconst POPOVER_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(POPOVER_VARIANTS);\n\nexport interface BasePopoverControlContextData {\n canMatchTriggerWidth?: boolean;\n}\nexport interface BasePopoverProps\n extends React.ComponentProps<typeof Popover>,\n WithVariants<typeof POPOVER_VARIANTS>,\n HasControlContextData<BasePopoverControlContextData> {\n className?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n matchTriggerWidth?: boolean;\n}\n\nexport function BasePopover(props: BasePopoverProps) {\n const {\n resetClassName,\n plasmicUpdateVariant,\n setControlContextData,\n matchTriggerWidth,\n ...restProps\n } = props;\n // Popover can be inside DialogTrigger, Select, Combobox, etc. So we can't just use a particular context like DialogTrigger (like we do in Modal) to decide if it is standalone\n const isStandalone = !React.useContext(PopoverContext);\n const hasTrigger = !!React.useContext(PlasmicPopoverTriggerContext);\n const triggerRef = React.useRef<any>(null);\n const canvasContext = usePlasmicCanvasContext();\n const matchTriggerWidthProp = hasTrigger && matchTriggerWidth;\n\n /*\n We only want to trap focus if:\n 1. The popover is NOT in canvas (because while the dialog is open on the canvas, the focus is trapped inside it, so any Studio modals like the Color Picker modal would glitch due to focus jumping back and forth)\n 2. The popover is NOT standalone or inside a Select/Combobox (focus trapping is already handled in Select/Combobox). A way to identify this is by the presence of a DialogTrigger context.\n */\n const { children, ...mergedProps } = mergeProps(\n {\n // isNonModal: Whether the popover is non-modal, i.e. elements outside the popover may be interacted with by assistive technologies.\n // Setting isNonModal to true in edit mode (canvas) means that the popover will not prevent the user from interacting with the canvas while the popover is open.\n isNonModal: canvasContext && !canvasContext.interactive,\n },\n restProps,\n { className: `${resetClassName}` },\n // Override some props if the popover is standalone\n isStandalone\n ? {\n triggerRef,\n isNonModal: true,\n // Always true, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\n // In component view, we never want to start with an empty artboard, so isOpen has to be true\n isOpen: true,\n }\n : null\n );\n\n useEffect(() => {\n setControlContextData?.({\n canMatchTriggerWidth: hasTrigger,\n });\n }, [hasTrigger, setControlContextData]);\n\n return (\n <>\n {isStandalone && <div ref={triggerRef} />}\n <Popover\n // more about `--trigger-width` here: https://react-spectrum.adobe.com/react-aria/Select.html#popover-1\n style={{\n ...(matchTriggerWidthProp ? { width: `var(--trigger-width)` } : {}),\n ...COMMON_STYLES,\n }}\n {...mergedProps}\n >\n {({ placement }) =>\n withObservedValues(\n children,\n {\n placementTop: placement === \"top\",\n placementBottom: placement === \"bottom\",\n placementLeft: placement === \"left\",\n placementRight: placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Popover>\n </>\n );\n}\n\nexport const POPOVER_COMPONENT_NAME = makeComponentName(\"popover\");\n\nexport function registerPopover(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BasePopover>\n) {\n registerComponentHelper(\n loader,\n BasePopover,\n {\n name: POPOVER_COMPONENT_NAME,\n displayName: \"Aria Popover\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerPopover\",\n importName: \"BasePopover\",\n variants,\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n width: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: \"20px\",\n rowGap: \"10px\",\n },\n children: [\n {\n type: \"text\",\n value: \"This is a Popover!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n },\n ],\n },\n shouldFlip: {\n type: \"boolean\",\n description:\n \"Whether the element should flip its orientation (e.g. top to bottom or left to right) when there is insufficient room for it to render completely.\",\n defaultValueHint: true,\n },\n\n resetClassName: {\n type: \"themeResetClass\",\n },\n matchTriggerWidth: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (_props, ctx) => !ctx?.canMatchTriggerWidth,\n },\n ...getCommonOverlayProps<BasePopoverProps>(\"popover\", {\n placement: { defaultValueHint: \"bottom\" },\n offset: { defaultValueHint: 8 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n },\n // No isOpen state for popover, because we assume that its open state is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc.\n styleSections: true,\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["pickAriaComponentVariants","React","PopoverContext","PlasmicPopoverTriggerContext","usePlasmicCanvasContext","mergeProps","useEffect","Popover","COMMON_STYLES","makeComponentName","registerComponentHelper","getCommonOverlayProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerPopover.cjs.js","sources":["../src/registerPopover.tsx"],"sourcesContent":["import { usePlasmicCanvasContext } from \"@plasmicapp/host\";\nimport { mergeProps } from \"@react-aria/utils\";\nimport React, { useEffect } from \"react\";\nimport { Popover, PopoverContext } from \"react-aria-components\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport { PlasmicPopoverTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n/*\n NOTE: Placement should be managed as variants, not just props.\n When `shouldFlip` is true, the placement prop may not represent the final position\n (e.g., if placement is set to \"bottom\" but lacks space, the popover may flip to \"top\").\n However, data-selectors will consistently indicate the actual placement of the popover.\n */\nconst POPOVER_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(POPOVER_VARIANTS);\n\nexport interface BasePopoverControlContextData {\n canMatchTriggerWidth?: boolean;\n}\nexport interface BasePopoverProps\n extends React.ComponentProps<typeof Popover>,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof POPOVER_VARIANTS>,\n HasControlContextData<BasePopoverControlContextData> {\n className?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n matchTriggerWidth?: boolean;\n}\n\nexport function BasePopover(props: BasePopoverProps) {\n const {\n resetClassName,\n plasmicUpdateVariant,\n setControlContextData,\n matchTriggerWidth,\n ...restProps\n } = props;\n // Popover can be inside DialogTrigger, Select, Combobox, etc. So we can't just use a particular context like DialogTrigger (like we do in Modal) to decide if it is standalone\n const isStandalone = !React.useContext(PopoverContext);\n const hasTrigger = !!React.useContext(PlasmicPopoverTriggerContext);\n const triggerRef = React.useRef<any>(null);\n const canvasContext = usePlasmicCanvasContext();\n const matchTriggerWidthProp = hasTrigger && matchTriggerWidth;\n\n /*\n We only want to trap focus if:\n 1. The popover is NOT in canvas (because while the dialog is open on the canvas, the focus is trapped inside it, so any Studio modals like the Color Picker modal would glitch due to focus jumping back and forth)\n 2. The popover is NOT standalone or inside a Select/Combobox (focus trapping is already handled in Select/Combobox). A way to identify this is by the presence of a DialogTrigger context.\n */\n const { children, ...mergedProps } = mergeProps(\n {\n // isNonModal: Whether the popover is non-modal, i.e. elements outside the popover may be interacted with by assistive technologies.\n // Setting isNonModal to true in edit mode (canvas) means that the popover will not prevent the user from interacting with the canvas while the popover is open.\n isNonModal: canvasContext && !canvasContext.interactive,\n },\n restProps,\n { className: `${resetClassName}` },\n // Override some props if the popover is standalone\n isStandalone\n ? {\n triggerRef,\n isNonModal: true,\n // Always true, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\n // In component view, we never want to start with an empty artboard, so isOpen has to be true\n isOpen: true,\n }\n : null\n );\n\n useEffect(() => {\n setControlContextData?.({\n canMatchTriggerWidth: hasTrigger,\n });\n }, [hasTrigger, setControlContextData]);\n\n return (\n <>\n {isStandalone && <div ref={triggerRef} />}\n <Popover\n // more about `--trigger-width` here: https://react-spectrum.adobe.com/react-aria/Select.html#popover-1\n style={{\n ...(matchTriggerWidthProp ? { width: `var(--trigger-width)` } : {}),\n ...COMMON_STYLES,\n }}\n {...mergedProps}\n >\n {({ placement }) =>\n withObservedValues(\n children,\n {\n placementTop: placement === \"top\",\n placementBottom: placement === \"bottom\",\n placementLeft: placement === \"left\",\n placementRight: placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Popover>\n </>\n );\n}\n\nexport const POPOVER_COMPONENT_NAME = makeComponentName(\"popover\");\n\nexport function registerPopover(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BasePopover>\n) {\n registerComponentHelper(\n loader,\n BasePopover,\n {\n name: POPOVER_COMPONENT_NAME,\n displayName: \"Aria Popover\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerPopover\",\n importName: \"BasePopover\",\n variants,\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n width: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: \"20px\",\n rowGap: \"10px\",\n },\n children: [\n {\n type: \"text\",\n value: \"This is a Popover!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n },\n ],\n },\n shouldFlip: {\n type: \"boolean\",\n description:\n \"Whether the element should flip its orientation (e.g. top to bottom or left to right) when there is insufficient room for it to render completely.\",\n defaultValueHint: true,\n },\n\n resetClassName: {\n type: \"themeResetClass\",\n },\n matchTriggerWidth: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (_props, ctx) => !ctx?.canMatchTriggerWidth,\n },\n ...getCommonOverlayProps<BasePopoverProps>(\"popover\", {\n placement: { defaultValueHint: \"bottom\" },\n offset: { defaultValueHint: 8 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n },\n // No isOpen state for popover, because we assume that its open state is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc.\n styleSections: true,\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":["pickAriaComponentVariants","React","PopoverContext","PlasmicPopoverTriggerContext","usePlasmicCanvasContext","mergeProps","useEffect","Popover","COMMON_STYLES","makeComponentName","registerComponentHelper","getCommonOverlayProps"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Popover } from "react-aria-components";
|
|
3
|
-
import { CodeComponentMetaOverrides, HasControlContextData, Registerable } from "./utils";
|
|
3
|
+
import { CodeComponentMetaOverrides, HasControlContextData, Registerable, WithPlasmicCanvasComponentInfo } from "./utils";
|
|
4
4
|
import { WithVariants } from "./variant-utils";
|
|
5
5
|
declare const POPOVER_VARIANTS: ("placementLeft" | "placementRight" | "placementTop" | "placementBottom")[];
|
|
6
6
|
export interface BasePopoverControlContextData {
|
|
7
7
|
canMatchTriggerWidth?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export interface BasePopoverProps extends React.ComponentProps<typeof Popover>, WithVariants<typeof POPOVER_VARIANTS>, HasControlContextData<BasePopoverControlContextData> {
|
|
9
|
+
export interface BasePopoverProps extends React.ComponentProps<typeof Popover>, WithPlasmicCanvasComponentInfo, WithVariants<typeof POPOVER_VARIANTS>, HasControlContextData<BasePopoverControlContextData> {
|
|
10
10
|
className?: string;
|
|
11
11
|
resetClassName?: string;
|
|
12
12
|
children?: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerPopover.esm.js","sources":["../src/registerPopover.tsx"],"sourcesContent":["import { usePlasmicCanvasContext } from \"@plasmicapp/host\";\nimport { mergeProps } from \"@react-aria/utils\";\nimport React, { useEffect } from \"react\";\nimport { Popover, PopoverContext } from \"react-aria-components\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport { PlasmicPopoverTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n/*\n NOTE: Placement should be managed as variants, not just props.\n When `shouldFlip` is true, the placement prop may not represent the final position\n (e.g., if placement is set to \"bottom\" but lacks space, the popover may flip to \"top\").\n However, data-selectors will consistently indicate the actual placement of the popover.\n */\nconst POPOVER_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(POPOVER_VARIANTS);\n\nexport interface BasePopoverControlContextData {\n canMatchTriggerWidth?: boolean;\n}\nexport interface BasePopoverProps\n extends React.ComponentProps<typeof Popover>,\n WithVariants<typeof POPOVER_VARIANTS>,\n HasControlContextData<BasePopoverControlContextData> {\n className?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n matchTriggerWidth?: boolean;\n}\n\nexport function BasePopover(props: BasePopoverProps) {\n const {\n resetClassName,\n plasmicUpdateVariant,\n setControlContextData,\n matchTriggerWidth,\n ...restProps\n } = props;\n // Popover can be inside DialogTrigger, Select, Combobox, etc. So we can't just use a particular context like DialogTrigger (like we do in Modal) to decide if it is standalone\n const isStandalone = !React.useContext(PopoverContext);\n const hasTrigger = !!React.useContext(PlasmicPopoverTriggerContext);\n const triggerRef = React.useRef<any>(null);\n const canvasContext = usePlasmicCanvasContext();\n const matchTriggerWidthProp = hasTrigger && matchTriggerWidth;\n\n /*\n We only want to trap focus if:\n 1. The popover is NOT in canvas (because while the dialog is open on the canvas, the focus is trapped inside it, so any Studio modals like the Color Picker modal would glitch due to focus jumping back and forth)\n 2. The popover is NOT standalone or inside a Select/Combobox (focus trapping is already handled in Select/Combobox). A way to identify this is by the presence of a DialogTrigger context.\n */\n const { children, ...mergedProps } = mergeProps(\n {\n // isNonModal: Whether the popover is non-modal, i.e. elements outside the popover may be interacted with by assistive technologies.\n // Setting isNonModal to true in edit mode (canvas) means that the popover will not prevent the user from interacting with the canvas while the popover is open.\n isNonModal: canvasContext && !canvasContext.interactive,\n },\n restProps,\n { className: `${resetClassName}` },\n // Override some props if the popover is standalone\n isStandalone\n ? {\n triggerRef,\n isNonModal: true,\n // Always true, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\n // In component view, we never want to start with an empty artboard, so isOpen has to be true\n isOpen: true,\n }\n : null\n );\n\n useEffect(() => {\n setControlContextData?.({\n canMatchTriggerWidth: hasTrigger,\n });\n }, [hasTrigger, setControlContextData]);\n\n return (\n <>\n {isStandalone && <div ref={triggerRef} />}\n <Popover\n // more about `--trigger-width` here: https://react-spectrum.adobe.com/react-aria/Select.html#popover-1\n style={{\n ...(matchTriggerWidthProp ? { width: `var(--trigger-width)` } : {}),\n ...COMMON_STYLES,\n }}\n {...mergedProps}\n >\n {({ placement }) =>\n withObservedValues(\n children,\n {\n placementTop: placement === \"top\",\n placementBottom: placement === \"bottom\",\n placementLeft: placement === \"left\",\n placementRight: placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Popover>\n </>\n );\n}\n\nexport const POPOVER_COMPONENT_NAME = makeComponentName(\"popover\");\n\nexport function registerPopover(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BasePopover>\n) {\n registerComponentHelper(\n loader,\n BasePopover,\n {\n name: POPOVER_COMPONENT_NAME,\n displayName: \"Aria Popover\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerPopover\",\n importName: \"BasePopover\",\n variants,\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n width: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: \"20px\",\n rowGap: \"10px\",\n },\n children: [\n {\n type: \"text\",\n value: \"This is a Popover!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n },\n ],\n },\n shouldFlip: {\n type: \"boolean\",\n description:\n \"Whether the element should flip its orientation (e.g. top to bottom or left to right) when there is insufficient room for it to render completely.\",\n defaultValueHint: true,\n },\n\n resetClassName: {\n type: \"themeResetClass\",\n },\n matchTriggerWidth: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (_props, ctx) => !ctx?.canMatchTriggerWidth,\n },\n ...getCommonOverlayProps<BasePopoverProps>(\"popover\", {\n placement: { defaultValueHint: \"bottom\" },\n offset: { defaultValueHint: 8 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n },\n // No isOpen state for popover, because we assume that its open state is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc.\n styleSections: true,\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerPopover.esm.js","sources":["../src/registerPopover.tsx"],"sourcesContent":["import { usePlasmicCanvasContext } from \"@plasmicapp/host\";\nimport { mergeProps } from \"@react-aria/utils\";\nimport React, { useEffect } from \"react\";\nimport { Popover, PopoverContext } from \"react-aria-components\";\nimport { COMMON_STYLES, getCommonOverlayProps } from \"./common\";\nimport { PlasmicPopoverTriggerContext } from \"./contexts\";\nimport {\n CodeComponentMetaOverrides,\n HasControlContextData,\n makeComponentName,\n Registerable,\n registerComponentHelper,\n WithPlasmicCanvasComponentInfo,\n} from \"./utils\";\nimport { pickAriaComponentVariants, WithVariants } from \"./variant-utils\";\n\n/*\n NOTE: Placement should be managed as variants, not just props.\n When `shouldFlip` is true, the placement prop may not represent the final position\n (e.g., if placement is set to \"bottom\" but lacks space, the popover may flip to \"top\").\n However, data-selectors will consistently indicate the actual placement of the popover.\n */\nconst POPOVER_VARIANTS = [\n \"placementTop\" as const,\n \"placementBottom\" as const,\n \"placementLeft\" as const,\n \"placementRight\" as const,\n];\n\nconst { variants, withObservedValues } =\n pickAriaComponentVariants(POPOVER_VARIANTS);\n\nexport interface BasePopoverControlContextData {\n canMatchTriggerWidth?: boolean;\n}\nexport interface BasePopoverProps\n extends React.ComponentProps<typeof Popover>,\n WithPlasmicCanvasComponentInfo,\n WithVariants<typeof POPOVER_VARIANTS>,\n HasControlContextData<BasePopoverControlContextData> {\n className?: string;\n resetClassName?: string;\n children?: React.ReactNode;\n matchTriggerWidth?: boolean;\n}\n\nexport function BasePopover(props: BasePopoverProps) {\n const {\n resetClassName,\n plasmicUpdateVariant,\n setControlContextData,\n matchTriggerWidth,\n ...restProps\n } = props;\n // Popover can be inside DialogTrigger, Select, Combobox, etc. So we can't just use a particular context like DialogTrigger (like we do in Modal) to decide if it is standalone\n const isStandalone = !React.useContext(PopoverContext);\n const hasTrigger = !!React.useContext(PlasmicPopoverTriggerContext);\n const triggerRef = React.useRef<any>(null);\n const canvasContext = usePlasmicCanvasContext();\n const matchTriggerWidthProp = hasTrigger && matchTriggerWidth;\n\n /*\n We only want to trap focus if:\n 1. The popover is NOT in canvas (because while the dialog is open on the canvas, the focus is trapped inside it, so any Studio modals like the Color Picker modal would glitch due to focus jumping back and forth)\n 2. The popover is NOT standalone or inside a Select/Combobox (focus trapping is already handled in Select/Combobox). A way to identify this is by the presence of a DialogTrigger context.\n */\n const { children, ...mergedProps } = mergeProps(\n {\n // isNonModal: Whether the popover is non-modal, i.e. elements outside the popover may be interacted with by assistive technologies.\n // Setting isNonModal to true in edit mode (canvas) means that the popover will not prevent the user from interacting with the canvas while the popover is open.\n isNonModal: canvasContext && !canvasContext.interactive,\n },\n restProps,\n { className: `${resetClassName}` },\n // Override some props if the popover is standalone\n isStandalone\n ? {\n triggerRef,\n isNonModal: true,\n // Always true, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\n // In component view, we never want to start with an empty artboard, so isOpen has to be true\n isOpen: true,\n }\n : null\n );\n\n useEffect(() => {\n setControlContextData?.({\n canMatchTriggerWidth: hasTrigger,\n });\n }, [hasTrigger, setControlContextData]);\n\n return (\n <>\n {isStandalone && <div ref={triggerRef} />}\n <Popover\n // more about `--trigger-width` here: https://react-spectrum.adobe.com/react-aria/Select.html#popover-1\n style={{\n ...(matchTriggerWidthProp ? { width: `var(--trigger-width)` } : {}),\n ...COMMON_STYLES,\n }}\n {...mergedProps}\n >\n {({ placement }) =>\n withObservedValues(\n children,\n {\n placementTop: placement === \"top\",\n placementBottom: placement === \"bottom\",\n placementLeft: placement === \"left\",\n placementRight: placement === \"right\",\n },\n plasmicUpdateVariant\n )\n }\n </Popover>\n </>\n );\n}\n\nexport const POPOVER_COMPONENT_NAME = makeComponentName(\"popover\");\n\nexport function registerPopover(\n loader?: Registerable,\n overrides?: CodeComponentMetaOverrides<typeof BasePopover>\n) {\n registerComponentHelper(\n loader,\n BasePopover,\n {\n name: POPOVER_COMPONENT_NAME,\n displayName: \"Aria Popover\",\n importPath: \"@plasmicpkgs/react-aria/skinny/registerPopover\",\n importName: \"BasePopover\",\n variants,\n defaultStyles: {\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: \"black\",\n width: \"300px\",\n backgroundColor: \"#FDE3C3\",\n },\n props: {\n children: {\n type: \"slot\",\n mergeWithParent: true,\n defaultValue: [\n {\n type: \"vbox\",\n styles: {\n width: \"stretch\",\n padding: \"20px\",\n rowGap: \"10px\",\n },\n children: [\n {\n type: \"text\",\n value: \"This is a Popover!\",\n },\n {\n type: \"text\",\n value: \"You can put anything you can imagine here!\",\n styles: {\n fontWeight: 500,\n },\n },\n {\n type: \"text\",\n value:\n \"Use it in a `Aria Dialog Trigger` component to trigger it on a button click!\",\n },\n ],\n },\n ],\n },\n shouldFlip: {\n type: \"boolean\",\n description:\n \"Whether the element should flip its orientation (e.g. top to bottom or left to right) when there is insufficient room for it to render completely.\",\n defaultValueHint: true,\n },\n\n resetClassName: {\n type: \"themeResetClass\",\n },\n matchTriggerWidth: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (_props, ctx) => !ctx?.canMatchTriggerWidth,\n },\n ...getCommonOverlayProps<BasePopoverProps>(\"popover\", {\n placement: { defaultValueHint: \"bottom\" },\n offset: { defaultValueHint: 8 },\n containerPadding: { defaultValueHint: 12 },\n crossOffset: { defaultValueHint: 0 },\n }),\n },\n // No isOpen state for popover, because we assume that its open state is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc.\n styleSections: true,\n trapsFocus: true,\n },\n overrides\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var test = require('@storybook/test');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var registerPopover = require('./registerPopover.cjs.js');
|
|
8
|
+
require('@plasmicapp/host');
|
|
9
|
+
require('@react-aria/utils');
|
|
10
|
+
require('react-aria-components');
|
|
11
|
+
require('./common-b3b54c72.cjs.js');
|
|
12
|
+
require('./utils-7d000fa4.cjs.js');
|
|
13
|
+
require('@plasmicapp/host/registerComponent');
|
|
14
|
+
require('./contexts-6d0cb2b1.cjs.js');
|
|
15
|
+
require('./variant-utils-0ad70db8.cjs.js');
|
|
16
|
+
|
|
17
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
|
|
19
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
20
|
+
|
|
21
|
+
const meta = {
|
|
22
|
+
title: "Components/BasePopover",
|
|
23
|
+
component: registerPopover.BasePopover,
|
|
24
|
+
args: {
|
|
25
|
+
onOpenChange: test.fn(),
|
|
26
|
+
children: /* @__PURE__ */ React__default.default.createElement("div", { "data-testid": "popover-content" }, /* @__PURE__ */ React__default.default.createElement("h2", null, "Standalone Popover"), /* @__PURE__ */ React__default.default.createElement("p", null, "This popover is rendered without a trigger"))
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const Standalone = {
|
|
30
|
+
play: async ({ args }) => {
|
|
31
|
+
const doc = test.within(document.body);
|
|
32
|
+
await test.waitFor(() => {
|
|
33
|
+
test.expect(doc.getByTestId("popover-content")).toBeInTheDocument();
|
|
34
|
+
});
|
|
35
|
+
await test.userEvent.click(document.body);
|
|
36
|
+
test.expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.Standalone = Standalone;
|
|
41
|
+
exports.default = meta;
|
|
42
|
+
//# sourceMappingURL=registerPopover.stories.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerPopover.stories.cjs.js","sources":["../src/registerPopover.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React from \"react\";\nimport { BasePopover } from \"./registerPopover\";\n\nconst meta: Meta<typeof BasePopover> = {\n title: \"Components/BasePopover\",\n component: BasePopover,\n args: {\n onOpenChange: fn(),\n children: (\n <div data-testid=\"popover-content\">\n <h2>Standalone Popover</h2>\n <p>This popover is rendered without a trigger</p>\n </div>\n ),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BasePopover>;\n\n// Standalone popover should always remain open, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\nexport const Standalone: Story = {\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Verify popover is visible\n await waitFor(() => {\n expect(doc.getByTestId(\"popover-content\")).toBeInTheDocument();\n });\n // Click outside should not dismiss popover\n await userEvent.click(document.body);\n expect(args.onOpenChange).not.toHaveBeenCalled();\n },\n};\n"],"names":["BasePopover","fn","React","within","waitFor","expect","userEvent"],"mappings":";;;;;;;;;;;;;;;;;;;;AAKA,MAAM,IAAiC,GAAA;AAAA,EACrC,KAAO,EAAA,wBAAA;AAAA,EACP,SAAW,EAAAA,2BAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,cAAcC,OAAG,EAAA;AAAA,IACjB,QACE,kBAAAC,sBAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,aAAA,EAAY,iBACf,EAAA,kBAAAA,sBAAA,CAAA,aAAA,CAAC,IAAG,EAAA,IAAA,EAAA,oBAAkB,CACtB,kBAAAA,sBAAA,CAAA,aAAA,CAAC,GAAE,EAAA,IAAA,EAAA,4CAA0C,CAC/C,CAAA;AAAA,GAEJ;AACF,EAAA;AAMO,MAAM,UAAoB,GAAA;AAAA,EAC/B,IAAM,EAAA,OAAO,EAAE,IAAA,EAAW,KAAA;AACxB,IAAM,MAAA,GAAA,GAAMC,WAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAA,MAAMC,aAAQ,MAAM;AAClB,MAAAC,WAAA,CAAO,GAAI,CAAA,WAAA,CAAY,iBAAiB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC9D,CAAA,CAAA;AAED,IAAM,MAAAC,cAAA,CAAU,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AACnC,IAAAD,WAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAAA,GACjD;AACF;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { fn, within, waitFor, expect, userEvent } from '@storybook/test';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { BasePopover } from './registerPopover.esm.js';
|
|
4
|
+
import '@plasmicapp/host';
|
|
5
|
+
import '@react-aria/utils';
|
|
6
|
+
import 'react-aria-components';
|
|
7
|
+
import './common-ceebbaea.esm.js';
|
|
8
|
+
import './utils-5d1b4c6b.esm.js';
|
|
9
|
+
import '@plasmicapp/host/registerComponent';
|
|
10
|
+
import './contexts-5cb81c2f.esm.js';
|
|
11
|
+
import './variant-utils-4405ebb0.esm.js';
|
|
12
|
+
|
|
13
|
+
const meta = {
|
|
14
|
+
title: "Components/BasePopover",
|
|
15
|
+
component: BasePopover,
|
|
16
|
+
args: {
|
|
17
|
+
onOpenChange: fn(),
|
|
18
|
+
children: /* @__PURE__ */ React.createElement("div", { "data-testid": "popover-content" }, /* @__PURE__ */ React.createElement("h2", null, "Standalone Popover"), /* @__PURE__ */ React.createElement("p", null, "This popover is rendered without a trigger"))
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const Standalone = {
|
|
22
|
+
play: async ({ args }) => {
|
|
23
|
+
const doc = within(document.body);
|
|
24
|
+
await waitFor(() => {
|
|
25
|
+
expect(doc.getByTestId("popover-content")).toBeInTheDocument();
|
|
26
|
+
});
|
|
27
|
+
await userEvent.click(document.body);
|
|
28
|
+
expect(args.onOpenChange).not.toHaveBeenCalled();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { Standalone, meta as default };
|
|
33
|
+
//# sourceMappingURL=registerPopover.stories.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerPopover.stories.esm.js","sources":["../src/registerPopover.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react\";\nimport { expect, fn, userEvent, waitFor, within } from \"@storybook/test\";\nimport React from \"react\";\nimport { BasePopover } from \"./registerPopover\";\n\nconst meta: Meta<typeof BasePopover> = {\n title: \"Components/BasePopover\",\n component: BasePopover,\n args: {\n onOpenChange: fn(),\n children: (\n <div data-testid=\"popover-content\">\n <h2>Standalone Popover</h2>\n <p>This popover is rendered without a trigger</p>\n </div>\n ),\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof BasePopover>;\n\n// Standalone popover should always remain open, because we assume that popover is always going to be controlled by a parent like Select, Combobox, DialogTrigger, etc, and its only really standalone in component view\nexport const Standalone: Story = {\n play: async ({ args }) => {\n const doc = within(document.body);\n\n // Verify popover is visible\n await waitFor(() => {\n expect(doc.getByTestId(\"popover-content\")).toBeInTheDocument();\n });\n // Click outside should not dismiss popover\n await userEvent.click(document.body);\n expect(args.onOpenChange).not.toHaveBeenCalled();\n },\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAKA,MAAM,IAAiC,GAAA;AAAA,EACrC,KAAO,EAAA,wBAAA;AAAA,EACP,SAAW,EAAA,WAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,cAAc,EAAG,EAAA;AAAA,IACjB,QACE,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,aAAA,EAAY,iBACf,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAG,EAAA,IAAA,EAAA,oBAAkB,CACtB,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAE,EAAA,IAAA,EAAA,4CAA0C,CAC/C,CAAA;AAAA,GAEJ;AACF,EAAA;AAMO,MAAM,UAAoB,GAAA;AAAA,EAC/B,IAAM,EAAA,OAAO,EAAE,IAAA,EAAW,KAAA;AACxB,IAAM,MAAA,GAAA,GAAM,MAAO,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAGhC,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,MAAA,CAAO,GAAI,CAAA,WAAA,CAAY,iBAAiB,CAAC,EAAE,iBAAkB,EAAA,CAAA;AAAA,KAC9D,CAAA,CAAA;AAED,IAAM,MAAA,SAAA,CAAU,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AACnC,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,GAAA,CAAI,gBAAiB,EAAA,CAAA;AAAA,GACjD;AACF;;;;"}
|