@warp-ds/elements 2.3.0-next.1 → 2.3.0-next.3
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/custom-elements.json +3295 -403
- package/dist/index.d.ts +484 -0
- package/dist/packages/combobox/combobox.react.stories.d.ts +28 -0
- package/dist/packages/combobox/combobox.react.stories.js +90 -0
- package/dist/packages/combobox/combobox.stories.d.ts +18 -0
- package/dist/packages/combobox/combobox.stories.js +117 -0
- package/dist/packages/combobox/index.d.ts +85 -0
- package/dist/packages/combobox/index.js +2492 -0
- package/dist/packages/combobox/index.js.map +7 -0
- package/dist/packages/combobox/locales/da/messages.d.mts +1 -0
- package/dist/packages/combobox/locales/da/messages.mjs +1 -0
- package/dist/packages/combobox/locales/en/messages.d.mts +1 -0
- package/dist/packages/combobox/locales/en/messages.mjs +1 -0
- package/dist/packages/combobox/locales/fi/messages.d.mts +1 -0
- package/dist/packages/combobox/locales/fi/messages.mjs +1 -0
- package/dist/packages/combobox/locales/nb/messages.d.mts +1 -0
- package/dist/packages/combobox/locales/nb/messages.mjs +1 -0
- package/dist/packages/combobox/locales/sv/messages.d.mts +1 -0
- package/dist/packages/combobox/locales/sv/messages.mjs +1 -0
- package/dist/packages/combobox/react.d.ts +7 -0
- package/dist/packages/combobox/react.js +17 -0
- package/dist/packages/combobox/styles.d.ts +1 -0
- package/dist/packages/combobox/styles.js +2 -0
- package/dist/packages/datepicker/DatePicker.test.d.ts +2 -0
- package/dist/packages/datepicker/DatePicker.test.js +69 -0
- package/dist/packages/datepicker/datepicker.d.ts +102 -0
- package/dist/packages/datepicker/datepicker.js +2785 -0
- package/dist/packages/datepicker/datepicker.js.map +7 -0
- package/dist/packages/datepicker/datepicker.react.stories.d.ts +18 -0
- package/dist/packages/datepicker/datepicker.react.stories.js +26 -0
- package/dist/packages/datepicker/datepicker.stories.d.ts +12 -0
- package/dist/packages/datepicker/datepicker.stories.js +51 -0
- package/dist/packages/datepicker/datepicker.test.d.ts +2 -0
- package/dist/packages/datepicker/datepicker.test.js +62 -0
- package/dist/packages/datepicker/index.d.ts +1 -0
- package/dist/packages/datepicker/index.js +1 -0
- package/dist/packages/datepicker/locales/da/messages.d.mts +1 -0
- package/dist/packages/datepicker/locales/da/messages.mjs +1 -0
- package/dist/packages/datepicker/locales/en/messages.d.mts +1 -0
- package/dist/packages/datepicker/locales/en/messages.mjs +1 -0
- package/dist/packages/datepicker/locales/fi/messages.d.mts +1 -0
- package/dist/packages/datepicker/locales/fi/messages.mjs +1 -0
- package/dist/packages/datepicker/locales/nb/messages.d.mts +1 -0
- package/dist/packages/datepicker/locales/nb/messages.mjs +1 -0
- package/dist/packages/datepicker/locales/sv/messages.d.mts +1 -0
- package/dist/packages/datepicker/locales/sv/messages.mjs +1 -0
- package/dist/packages/datepicker/react.d.ts +5 -0
- package/dist/packages/datepicker/react.js +15 -0
- package/dist/packages/datepicker/styles/w-datepicker-calendar.styles.d.ts +1 -0
- package/dist/packages/datepicker/styles/w-datepicker-calendar.styles.js +15 -0
- package/dist/packages/datepicker/styles/w-datepicker-day.styles.d.ts +1 -0
- package/dist/packages/datepicker/styles/w-datepicker-day.styles.js +64 -0
- package/dist/packages/datepicker/styles/w-datepicker-month.styles.d.ts +1 -0
- package/dist/packages/datepicker/styles/w-datepicker-month.styles.js +72 -0
- package/dist/packages/datepicker/styles/w-datepicker.styles.d.ts +1 -0
- package/dist/packages/datepicker/styles/w-datepicker.styles.js +101 -0
- package/dist/packages/datepicker/utils.d.ts +13 -0
- package/dist/packages/datepicker/utils.js +28 -0
- package/dist/packages/dead-toggle/dead-toggle.react.stories.d.ts +15 -0
- package/dist/packages/dead-toggle/dead-toggle.react.stories.js +34 -0
- package/dist/packages/dead-toggle/dead-toggle.stories.d.ts +14 -0
- package/dist/packages/dead-toggle/dead-toggle.stories.js +45 -0
- package/dist/packages/dead-toggle/dead-toggle.test.d.ts +1 -0
- package/dist/packages/dead-toggle/dead-toggle.test.js +9 -0
- package/dist/packages/dead-toggle/index.d.ts +17 -0
- package/dist/packages/dead-toggle/index.js +2548 -0
- package/dist/packages/dead-toggle/index.js.map +7 -0
- package/dist/packages/dead-toggle/react.d.ts +2 -0
- package/dist/packages/dead-toggle/react.js +11 -0
- package/dist/packages/link/index.js +2640 -93
- package/dist/packages/link/index.js.map +7 -0
- package/dist/packages/link/link.react.stories.d.ts +21 -0
- package/dist/packages/link/link.react.stories.js +96 -0
- package/dist/packages/link/link.stories.d.ts +20 -0
- package/dist/packages/link/link.stories.js +110 -0
- package/dist/packages/link/link.test.d.ts +1 -0
- package/dist/packages/link/link.test.js +9 -0
- package/dist/packages/link/react.d.ts +2 -0
- package/dist/packages/link/react.js +11 -0
- package/dist/packages/pageindicator/index.d.ts +10 -0
- package/dist/packages/pageindicator/index.js +32 -0
- package/dist/packages/pageindicator/index.js.map +7 -0
- package/dist/packages/pageindicator/pageindicator.react.stories.d.ts +19 -0
- package/dist/packages/pageindicator/pageindicator.react.stories.js +20 -0
- package/dist/packages/pageindicator/pageindicator.stories.d.ts +32 -0
- package/dist/packages/pageindicator/pageindicator.stories.js +71 -0
- package/dist/packages/pageindicator/react.d.ts +2 -0
- package/dist/packages/pageindicator/react.js +11 -0
- package/dist/packages/pageindicator/style.d.ts +1 -0
- package/dist/packages/pageindicator/style.js +26 -0
- package/dist/packages/rip-and-tear-checkbox/checkbox.d.ts +66 -0
- package/dist/packages/rip-and-tear-checkbox/checkbox.js +2592 -0
- package/dist/packages/rip-and-tear-checkbox/checkbox.js.map +7 -0
- package/dist/packages/rip-and-tear-checkbox/checkbox.stories.d.ts +8 -0
- package/dist/packages/rip-and-tear-checkbox/checkbox.stories.js +11 -0
- package/dist/packages/rip-and-tear-checkbox/index.d.ts +1 -0
- package/dist/packages/rip-and-tear-checkbox/index.js +4 -0
- package/dist/packages/rip-and-tear-checkbox/react.d.ts +5 -0
- package/dist/packages/rip-and-tear-checkbox/react.js +15 -0
- package/dist/packages/rip-and-tear-checkbox/rip-and-tear-checkbox.react.stories.d.ts +12 -0
- package/dist/packages/rip-and-tear-checkbox/rip-and-tear-checkbox.react.stories.js +10 -0
- package/dist/packages/rip-and-tear-checkbox/styles.d.ts +0 -0
- package/dist/packages/rip-and-tear-checkbox/styles.js +0 -0
- package/dist/packages/rip-and-tear-radio/base-element.d.ts +46 -0
- package/dist/packages/rip-and-tear-radio/base-element.js +100 -0
- package/dist/packages/rip-and-tear-radio/custom-error-validator.d.ts +6 -0
- package/dist/packages/rip-and-tear-radio/custom-error-validator.js +22 -0
- package/dist/packages/rip-and-tear-radio/form-associated-element.d.ts +103 -0
- package/dist/packages/rip-and-tear-radio/form-associated-element.js +282 -0
- package/dist/packages/rip-and-tear-radio/host-styles.d.ts +1 -0
- package/dist/packages/rip-and-tear-radio/host-styles.js +12 -0
- package/dist/packages/rip-and-tear-radio/index.d.ts +1 -0
- package/dist/packages/rip-and-tear-radio/index.js +6 -0
- package/dist/packages/rip-and-tear-radio/invalid.d.ts +8 -0
- package/dist/packages/rip-and-tear-radio/invalid.js +5 -0
- package/dist/packages/rip-and-tear-radio/math.d.ts +1 -0
- package/dist/packages/rip-and-tear-radio/math.js +4 -0
- package/dist/packages/rip-and-tear-radio/radio-group-styles.d.ts +1 -0
- package/dist/packages/rip-and-tear-radio/radio-group-styles.js +59 -0
- package/dist/packages/rip-and-tear-radio/radio-group-styles.js.map +7 -0
- package/dist/packages/rip-and-tear-radio/radio-group.d.ts +72 -0
- package/dist/packages/rip-and-tear-radio/radio-group.js +2649 -0
- package/dist/packages/rip-and-tear-radio/radio-group.js.map +7 -0
- package/dist/packages/rip-and-tear-radio/radio-styles.d.ts +0 -0
- package/dist/packages/rip-and-tear-radio/radio-styles.js +1 -0
- package/dist/packages/rip-and-tear-radio/radio-styles.js.map +7 -0
- package/dist/packages/rip-and-tear-radio/radio.d.ts +38 -0
- package/dist/packages/rip-and-tear-radio/radio.js +2563 -0
- package/dist/packages/rip-and-tear-radio/radio.js.map +7 -0
- package/dist/packages/rip-and-tear-radio/radio.stories.d.ts +8 -0
- package/dist/packages/rip-and-tear-radio/radio.stories.js +2654 -0
- package/dist/packages/rip-and-tear-radio/radio.stories.js.map +7 -0
- package/dist/packages/rip-and-tear-radio/react.d.ts +9 -0
- package/dist/packages/rip-and-tear-radio/react.js +22 -0
- package/dist/packages/rip-and-tear-radio/required-validator.d.ts +11 -0
- package/dist/packages/rip-and-tear-radio/required-validator.js +34 -0
- package/dist/packages/rip-and-tear-radio/rip-and-tear-radio.react.stories.d.ts +9 -0
- package/dist/packages/rip-and-tear-radio/rip-and-tear-radio.react.stories.js +10 -0
- package/dist/packages/rip-and-tear-radio/slot.d.ts +20 -0
- package/dist/packages/rip-and-tear-radio/slot.js +71 -0
- package/dist/packages/rip-and-tear-radio/watch.d.ts +26 -0
- package/dist/packages/rip-and-tear-radio/watch.js +39 -0
- package/dist/packages/steps/index.d.ts +36 -0
- package/dist/packages/steps/index.js +2465 -0
- package/dist/packages/steps/index.js.map +7 -0
- package/dist/packages/steps/locales/da/messages.d.mts +1 -0
- package/dist/packages/steps/locales/da/messages.mjs +1 -0
- package/dist/packages/steps/locales/en/messages.d.mts +1 -0
- package/dist/packages/steps/locales/en/messages.mjs +1 -0
- package/dist/packages/steps/locales/fi/messages.d.mts +1 -0
- package/dist/packages/steps/locales/fi/messages.mjs +1 -0
- package/dist/packages/steps/locales/nb/messages.d.mts +1 -0
- package/dist/packages/steps/locales/nb/messages.mjs +1 -0
- package/dist/packages/steps/locales/sv/messages.d.mts +1 -0
- package/dist/packages/steps/locales/sv/messages.mjs +1 -0
- package/dist/packages/steps/react.d.ts +3 -0
- package/dist/packages/steps/react.js +16 -0
- package/dist/packages/steps/steps.react.stories.d.ts +15 -0
- package/dist/packages/steps/steps.react.stories.js +112 -0
- package/dist/packages/steps/steps.stories.d.ts +12 -0
- package/dist/packages/steps/steps.stories.js +172 -0
- package/dist/packages/steps/styles.d.ts +1 -0
- package/dist/packages/steps/styles.js +2 -0
- package/dist/packages/switch/index.d.ts +15 -0
- package/dist/packages/switch/index.js +2455 -0
- package/dist/packages/switch/index.js.map +7 -0
- package/dist/packages/switch/react.d.ts +5 -0
- package/dist/packages/switch/react.js +15 -0
- package/dist/packages/switch/styles.d.ts +1 -0
- package/dist/packages/switch/styles.js +2 -0
- package/dist/packages/switch/switch.react.stories.d.ts +15 -0
- package/dist/packages/switch/switch.react.stories.js +29 -0
- package/dist/packages/switch/switch.stories.d.ts +9 -0
- package/dist/packages/switch/switch.stories.js +34 -0
- package/dist/packages/tabs/index.d.ts +4 -0
- package/dist/packages/tabs/index.js +3 -0
- package/dist/packages/tabs/react.d.ts +12 -0
- package/dist/packages/tabs/react.js +31 -0
- package/dist/packages/tabs/styles.d.ts +1 -0
- package/dist/packages/tabs/styles.js +2 -0
- package/dist/packages/tabs/tab-panel.d.ts +20 -0
- package/dist/packages/tabs/tab-panel.js +51 -0
- package/dist/packages/tabs/tab.d.ts +18 -0
- package/dist/packages/tabs/tab.js +2463 -0
- package/dist/packages/tabs/tab.js.map +7 -0
- package/dist/packages/tabs/tabs.d.ts +40 -0
- package/dist/packages/tabs/tabs.js +2448 -0
- package/dist/packages/tabs/tabs.js.map +7 -0
- package/dist/packages/tabs/tabs.react.stories.d.ts +15 -0
- package/dist/packages/tabs/tabs.react.stories.js +51 -0
- package/dist/packages/tabs/tabs.stories.d.ts +8 -0
- package/dist/packages/tabs/tabs.stories.js +84 -0
- package/dist/packages/toggle-styles.d.ts +1 -0
- package/dist/packages/toggle-styles.js +109 -0
- package/dist/web-types.json +496 -1
- package/package.json +184 -3
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StoryObj } from '@storybook/react';
|
|
3
|
+
import { DatePicker } from './react';
|
|
4
|
+
declare const _default: {
|
|
5
|
+
title: string;
|
|
6
|
+
render(args: Omit<React.HTMLAttributes<import("./datepicker").WarpDatepicker>, "label" | "onchange" | "onChange" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "form" | "input" | "name" | "value" | "updated" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "resetFormControl" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "month" | "locale" | "calendar" | "wrapper" | "headerFormat" | "weekdayFormat" | "isDayDisabled" | "dayFormat" | "isCalendarOpen" | "navigationDate" | "selectedDate" | "weeks" | "toggleButton" | "previousMonthButton" | "todayCell" | "selectedCell"> & {
|
|
7
|
+
onChange?: (e: Event) => void;
|
|
8
|
+
onchange?: (e: Event) => void;
|
|
9
|
+
} & Partial<Omit<import("./datepicker").WarpDatepicker, keyof HTMLElement>> & React.RefAttributes<import("./datepicker").WarpDatepicker>): React.JSX.Element;
|
|
10
|
+
component: import("@lit/react").ReactWebComponent<import("./datepicker").WarpDatepicker, {
|
|
11
|
+
onChange: string;
|
|
12
|
+
onchange: string;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
export default _default;
|
|
16
|
+
export type Story = StoryObj<typeof DatePicker>;
|
|
17
|
+
export declare const Default: Story;
|
|
18
|
+
export declare const DisableCalendarDates: Story;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DatePicker } from './react';
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Forms/Datepicker',
|
|
5
|
+
render(args) {
|
|
6
|
+
return (React.createElement("div", { style: { minHeight: '400px' } },
|
|
7
|
+
React.createElement(DatePicker, { ...args })));
|
|
8
|
+
},
|
|
9
|
+
component: DatePicker,
|
|
10
|
+
};
|
|
11
|
+
export const Default = {
|
|
12
|
+
args: {
|
|
13
|
+
label: 'Dato',
|
|
14
|
+
lang: 'nb',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export const DisableCalendarDates = {
|
|
18
|
+
args: {
|
|
19
|
+
label: 'Dato',
|
|
20
|
+
lang: 'nb',
|
|
21
|
+
},
|
|
22
|
+
render(args) {
|
|
23
|
+
return (React.createElement("div", { style: { minHeight: '400px' } },
|
|
24
|
+
React.createElement(DatePicker, { ...args, isDayDisabled: (day) => day.getDay() === 0 })));
|
|
25
|
+
},
|
|
26
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import '../button/index.js';
|
|
3
|
+
import type { WarpDatepicker } from './index.js';
|
|
4
|
+
import './index.js';
|
|
5
|
+
declare const args: Partial<WarpDatepicker> & {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
};
|
|
8
|
+
declare const meta: Meta<typeof args>;
|
|
9
|
+
export default meta;
|
|
10
|
+
type Story = StoryObj<typeof args>;
|
|
11
|
+
export declare const Default: Story;
|
|
12
|
+
export declare const DisableCalendarDates: Story;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { spread } from '@open-wc/lit-helpers';
|
|
2
|
+
import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import { prespread } from '../../.storybook/utilities.js';
|
|
5
|
+
import '../button/index.js';
|
|
6
|
+
import './index.js';
|
|
7
|
+
const { events, args, argTypes } = getStorybookHelpers('w-datepicker');
|
|
8
|
+
const meta = {
|
|
9
|
+
title: 'Forms/Datepicker',
|
|
10
|
+
render(args) {
|
|
11
|
+
return html `
|
|
12
|
+
<!-- Workaround for Storybook's overflow hidden -->
|
|
13
|
+
<div style="min-height: 400px">
|
|
14
|
+
<w-datepicker ${spread(prespread(args))}></w-datepicker>
|
|
15
|
+
</div>
|
|
16
|
+
`;
|
|
17
|
+
},
|
|
18
|
+
args,
|
|
19
|
+
argTypes,
|
|
20
|
+
parameters: {
|
|
21
|
+
actions: {
|
|
22
|
+
handles: events,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export default meta;
|
|
27
|
+
export const Default = {
|
|
28
|
+
args: {
|
|
29
|
+
label: 'Dato',
|
|
30
|
+
lang: 'nb',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
export const DisableCalendarDates = {
|
|
34
|
+
args: {
|
|
35
|
+
label: 'Dato',
|
|
36
|
+
lang: 'nb',
|
|
37
|
+
},
|
|
38
|
+
render(args) {
|
|
39
|
+
return html `
|
|
40
|
+
<!-- Workaround for Storybook's overflow hidden -->
|
|
41
|
+
<div style="min-height: 400px">
|
|
42
|
+
<w-datepicker ${spread(prespread(args))}></w-datepicker>
|
|
43
|
+
</div>
|
|
44
|
+
<script type="module">
|
|
45
|
+
const datePicker = document.querySelector('w-datepicker');
|
|
46
|
+
// No working on Sundays!
|
|
47
|
+
datePicker.isDayDisabled = (day) => day.getDay() === 0;
|
|
48
|
+
</script>
|
|
49
|
+
`;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { server, userEvent } from '@vitest/browser/context';
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { expect, test } from 'vitest';
|
|
4
|
+
import { render } from 'vitest-browser-lit';
|
|
5
|
+
import '../button/index.js';
|
|
6
|
+
import './index.js';
|
|
7
|
+
test('can pick a date using a pointer', async () => {
|
|
8
|
+
const component = html `
|
|
9
|
+
<form data-testid="flight">
|
|
10
|
+
<w-datepicker label="From date" name="from"></w-datepicker>
|
|
11
|
+
</form>
|
|
12
|
+
`;
|
|
13
|
+
const page = render(component);
|
|
14
|
+
await expect.element(page.getByLabelText('From date')).not.toHaveValue();
|
|
15
|
+
await expect.element(page.getByTestId('calendar').query()).not.toBeVisible();
|
|
16
|
+
await page.getByRole('button').click({ force: true });
|
|
17
|
+
await expect.element(page.getByTestId('calendar')).toBeVisible();
|
|
18
|
+
await page.getByRole('gridcell').nth(15).click();
|
|
19
|
+
await expect
|
|
20
|
+
.element(page.getByTestId('calendar').query(), { message: 'expected calendar to close after clicking a date' })
|
|
21
|
+
.not.toBeVisible();
|
|
22
|
+
await expect.element(page.getByLabelText('From date')).toHaveValue();
|
|
23
|
+
const formData = new FormData(page.getByTestId('flight').element());
|
|
24
|
+
expect(formData.get('from')).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
test.skipIf(server.browser === 'firefox')('can pick a date using a keyboard', async () => {
|
|
27
|
+
const component = html `
|
|
28
|
+
<form data-testid="flight">
|
|
29
|
+
<w-datepicker label="From date" name="from"></w-datepicker>
|
|
30
|
+
</form>
|
|
31
|
+
`;
|
|
32
|
+
const page = render(component);
|
|
33
|
+
await expect.element(page.getByLabelText('From date')).not.toHaveValue();
|
|
34
|
+
await expect.element(page.getByTestId('calendar').query()).not.toBeVisible();
|
|
35
|
+
const toggle = page.getByRole('button').element();
|
|
36
|
+
toggle.focus();
|
|
37
|
+
await userEvent.keyboard('[Enter]');
|
|
38
|
+
await expect.element(page.getByTestId('calendar')).toBeVisible();
|
|
39
|
+
page.getByRole('gridcell').nth(15).element().focus();
|
|
40
|
+
await userEvent.keyboard('[Enter]');
|
|
41
|
+
await expect
|
|
42
|
+
.element(page.getByTestId('calendar').query(), { message: 'expected calendar to close after clicking a date' })
|
|
43
|
+
.not.toBeVisible();
|
|
44
|
+
await expect.element(page.getByLabelText('From date')).toHaveValue();
|
|
45
|
+
const formData = new FormData(page.getByTestId('flight').element());
|
|
46
|
+
expect(formData.get('from')).toBeTruthy();
|
|
47
|
+
});
|
|
48
|
+
test('can pick a date by typing in the input field', async () => {
|
|
49
|
+
const component = html `
|
|
50
|
+
<form data-testid="flight">
|
|
51
|
+
<w-datepicker label="From date" name="from" lang="nb"></w-datepicker>
|
|
52
|
+
</form>
|
|
53
|
+
`;
|
|
54
|
+
const page = render(component);
|
|
55
|
+
await expect.element(page.getByLabelText('From date')).not.toHaveValue();
|
|
56
|
+
const toggle = page.getByLabelText('From date').element();
|
|
57
|
+
toggle.focus();
|
|
58
|
+
await page.getByLabelText('From date').fill('2025-01-01');
|
|
59
|
+
await expect.element(page.getByLabelText('From date')).toHaveValue();
|
|
60
|
+
const formData = new FormData(page.getByTestId('flight').element());
|
|
61
|
+
expect(formData.get('from')).toBeTruthy();
|
|
62
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './datepicker.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './datepicker.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const messages: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*eslint-disable*/ export const messages = JSON.parse("{\"datepicker.toggle.changeDate\":[\"Change date, \",[\"currentDate\"]],\"datepicker.toggle.chooseDate\":[\"Choose date\"],\"datepicker.calendar.roleDescription\":[\"Date picker\"],\"datepicker.calendar.nextMonth\":[\"Next month\"],\"datepicker.calendar.previousMonth\":[\"Previous month\"]}");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const messages: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*eslint-disable*/ export const messages = JSON.parse("{\"datepicker.toggle.changeDate\":[\"Change date, \",[\"currentDate\"]],\"datepicker.toggle.chooseDate\":[\"Choose date\"],\"datepicker.calendar.roleDescription\":[\"Date picker\"],\"datepicker.calendar.nextMonth\":[\"Next month\"],\"datepicker.calendar.previousMonth\":[\"Previous month\"]}");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const messages: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*eslint-disable*/ export const messages = JSON.parse("{\"datepicker.toggle.changeDate\":[\"Change date, \",[\"currentDate\"]],\"datepicker.toggle.chooseDate\":[\"Choose date\"],\"datepicker.calendar.roleDescription\":[\"Date picker\"],\"datepicker.calendar.nextMonth\":[\"Next month\"],\"datepicker.calendar.previousMonth\":[\"Previous month\"]}");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const messages: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*eslint-disable*/ export const messages = JSON.parse("{\"datepicker.toggle.changeDate\":[\"Endre dato, \",[\"currentDate\"]],\"datepicker.toggle.chooseDate\":[\"Velg dato\"],\"datepicker.calendar.roleDescription\":[\"datovelger\"],\"datepicker.calendar.nextMonth\":[\"Gå til neste måned\"],\"datepicker.calendar.previousMonth\":[\"Gå til forrige måned\"]}");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const messages: any;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*eslint-disable*/ export const messages = JSON.parse("{\"datepicker.toggle.changeDate\":[\"Change date, \",[\"currentDate\"]],\"datepicker.toggle.chooseDate\":[\"Choose date\"],\"datepicker.calendar.roleDescription\":[\"Date picker\"],\"datepicker.calendar.nextMonth\":[\"Next month\"],\"datepicker.calendar.previousMonth\":[\"Previous month\"]}");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
// decouple from CDN by providing a dummy class
|
|
5
|
+
class Component extends LitElement {
|
|
6
|
+
}
|
|
7
|
+
export const DatePicker = createComponent({
|
|
8
|
+
tagName: 'w-datepicker',
|
|
9
|
+
elementClass: Component,
|
|
10
|
+
react: React,
|
|
11
|
+
events: {
|
|
12
|
+
onChange: 'change',
|
|
13
|
+
onchange: 'change',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wDatepickerCalendarStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const wDatepickerCalendarStyles = css `
|
|
3
|
+
.w-datepicker__calendar {
|
|
4
|
+
--_calendar-border-color: var(--calendar-border-color, initial);
|
|
5
|
+
--_calendar-border-style: var(--calendar-border-style, none);
|
|
6
|
+
--_calendar-border-width: var(--calendar-border-width, 0);
|
|
7
|
+
--_calendar-border-radius: var(--calendar-border-radius, 0);
|
|
8
|
+
position: relative;
|
|
9
|
+
z-index: 30;
|
|
10
|
+
|
|
11
|
+
border: var(--_calendar-border-width) var(--_calendar-border-style) var(--_calendar-border-color);
|
|
12
|
+
border-radius: var(--_calendar-border-radius);
|
|
13
|
+
padding: 16px;
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wDatepickerDayStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const wDatepickerDayStyles = css `
|
|
3
|
+
/* === Day Cell === */
|
|
4
|
+
.w-datepicker__day {
|
|
5
|
+
/* No longer in use? */
|
|
6
|
+
--_day-in-range-background: var(--day-in-range-background, var(--w-s-color-background-primary-subtle-active));
|
|
7
|
+
|
|
8
|
+
text-align: center;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
outline: none;
|
|
11
|
+
position: relative;
|
|
12
|
+
|
|
13
|
+
color: var(--day-color, var(--w-s-color-text));
|
|
14
|
+
background-color: var(--day-background, transparent);
|
|
15
|
+
width: var(--day-width, 40px);
|
|
16
|
+
height: var(--day-height, 40px);
|
|
17
|
+
padding: var(--day-padding, 0);
|
|
18
|
+
font-weight: var(--day-font-weight, normal);
|
|
19
|
+
font-size: var(--w-font-size-s);
|
|
20
|
+
line-height: var(--w-line-height-s);
|
|
21
|
+
border-radius: var(--day-border-radius, 50%);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.w-datepicker__day:hover {
|
|
25
|
+
--day-color: var(--w-s-color-text);
|
|
26
|
+
--day-background: var(--w-s-color-background-hover);
|
|
27
|
+
--day-border-radius: 50%;
|
|
28
|
+
}
|
|
29
|
+
.w-datepicker__day:active {
|
|
30
|
+
--day-color: var(--w-s-color-text);
|
|
31
|
+
--day-background: var(--w-s-color-background-active);
|
|
32
|
+
--day-border-radius: 50%;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.w-datepicker__day:focus-visible {
|
|
36
|
+
text-decoration: none;
|
|
37
|
+
outline: 2px solid var(--w-s-color-border-focus);
|
|
38
|
+
outline-offset: var(--w-outline-offset, -2px);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* === Day variants === */
|
|
42
|
+
.w-datepicker__day--today {
|
|
43
|
+
--day-font-weight: bold;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.w-datepicker__day--selected {
|
|
47
|
+
--day-background: var(--w-s-color-background-primary);
|
|
48
|
+
--day-color: var(--w-s-color-text-inverted);
|
|
49
|
+
--day-font-weight: bold;
|
|
50
|
+
}
|
|
51
|
+
.w-datepicker__day--selected:hover,
|
|
52
|
+
.w-datepicker__day--selected:focus-visible {
|
|
53
|
+
--day-background: var(--w-s-color-background-primary-hover);
|
|
54
|
+
--day-color: var(--w-s-color-text-inverted);
|
|
55
|
+
--day-font-weight: bold;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.w-datepicker__day--disabled,
|
|
59
|
+
.w-datepicker__day--disabled:hover {
|
|
60
|
+
--day-color: var(--w-s-color-text-disabled);
|
|
61
|
+
cursor: not-allowed;
|
|
62
|
+
pointer-events: none;
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wDatepickerMonthStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const wDatepickerMonthStyles = css `
|
|
3
|
+
.w-datepicker__month {
|
|
4
|
+
/* Sets default used in the day fragment */
|
|
5
|
+
--day-width: 40px;
|
|
6
|
+
|
|
7
|
+
--_month-color: var(--month-color, var(--w-s-color-text));
|
|
8
|
+
--_month-font-size: var(--month-font-size, var(--w-font-size-m));
|
|
9
|
+
--_month-line-height: var(--month-line-height, var(--w-line-height-m));
|
|
10
|
+
|
|
11
|
+
--_month-table-min-width: var(--month-table-min-width, calc(var(--day-width) * 7));
|
|
12
|
+
|
|
13
|
+
--_weekdays-font-size: var(--weekdays-font-size, var(--w-font-size-xs));
|
|
14
|
+
--_weekdays-line-height: var(--weekdays-font-size, var(--w-line-height-xs));
|
|
15
|
+
--_weekdays-font-weight: var(--weekdays-font-weight, bold);
|
|
16
|
+
|
|
17
|
+
--_weekdays-padding: var(--weekdays-padding, 8px 0 4px 0);
|
|
18
|
+
|
|
19
|
+
text-align: center;
|
|
20
|
+
user-select: none;
|
|
21
|
+
display: inline-block;
|
|
22
|
+
|
|
23
|
+
color: var(--_month-color);
|
|
24
|
+
font-size: var(--_month-font-size);
|
|
25
|
+
line-height: var(--_month-line-height);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.w-datepicker__month__nav {
|
|
29
|
+
margin: 0 0 8px 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.w-datepicker__month__nav__header {
|
|
33
|
+
text-align: center;
|
|
34
|
+
font-weight: Bold;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.w-datepicker__table {
|
|
38
|
+
width: 100%;
|
|
39
|
+
border-spacing: 0;
|
|
40
|
+
border-collapse: collapse;
|
|
41
|
+
display: block;
|
|
42
|
+
min-width: var(--_month-table-min-width);
|
|
43
|
+
padding-top: 8px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.w-datepicker__weekday {
|
|
47
|
+
text-align: center;
|
|
48
|
+
font-size: var(--_weekdays-font-size);
|
|
49
|
+
line-height: var(--_weekdays-line-height);
|
|
50
|
+
font-weight: var(--_weekdays-font-weight);
|
|
51
|
+
padding: var(--_weekdays-padding);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.w-datepicker__month-nav {
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
width: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.w-datepicker__month__nav__button {
|
|
62
|
+
flex-shrink: 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.w-datepicker__month__nav__header {
|
|
66
|
+
flex: 1;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
text-align: center;
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const wDatepickerStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { css } from 'lit';
|
|
2
|
+
export const wDatepickerStyles = css `
|
|
3
|
+
/* CustomDatePicker.css */
|
|
4
|
+
|
|
5
|
+
/* container */
|
|
6
|
+
.w-datepicker-wrapper {
|
|
7
|
+
position: relative;
|
|
8
|
+
display: inline-block;
|
|
9
|
+
width: 100%;
|
|
10
|
+
font-size: var(--w-font-size-m);
|
|
11
|
+
line-height: var(--w-line-height-m);
|
|
12
|
+
}
|
|
13
|
+
.w-datepicker-input-wrapper {
|
|
14
|
+
position: relative;
|
|
15
|
+
}
|
|
16
|
+
/* hide the browser’s calendar icon, and prevent the native popup */
|
|
17
|
+
.w-datepicker-input {
|
|
18
|
+
/* remove default arrows/appearance */
|
|
19
|
+
-webkit-appearance: none;
|
|
20
|
+
-moz-appearance: textfield;
|
|
21
|
+
appearance: none;
|
|
22
|
+
|
|
23
|
+
/* basic styling */
|
|
24
|
+
display: block;
|
|
25
|
+
padding: 1.2rem 0.8rem;
|
|
26
|
+
border: 1px solid #ccc;
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
width: 100%;
|
|
29
|
+
height: 48px;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
font-size: var(--w-font-size-m);
|
|
32
|
+
line-height: var(--w-line-height-m);
|
|
33
|
+
background-color: var(--w-s-color-background);
|
|
34
|
+
}
|
|
35
|
+
.w-datepicker-input:hover {
|
|
36
|
+
border-color: var(--w-s-color-border-hover);
|
|
37
|
+
}
|
|
38
|
+
.w-datepicker-input:active {
|
|
39
|
+
border-color: var(--w-s-color-border-selected);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.w-datepicker-input:focus,
|
|
43
|
+
.w-datepicker-input:focus-visible {
|
|
44
|
+
outline: 2px solid var(--w-s-color-border-focus);
|
|
45
|
+
outline-offset: -2px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.w-datepicker-input-label {
|
|
49
|
+
font-size: var(--w-font-size-s);
|
|
50
|
+
line-height: var(--w-line-height-s);
|
|
51
|
+
font-weight: 700;
|
|
52
|
+
cursor: pointer;
|
|
53
|
+
padding-bottom: 0.4rem;
|
|
54
|
+
color: var(--w-s-color-text);
|
|
55
|
+
display: block;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* custom calendar button */
|
|
59
|
+
.w-datepicker-button {
|
|
60
|
+
position: absolute;
|
|
61
|
+
right: 2px;
|
|
62
|
+
top: 2px;
|
|
63
|
+
height: 44px;
|
|
64
|
+
width: 44px !important;
|
|
65
|
+
border-radius: 2px !important;
|
|
66
|
+
border: none;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
pointer-events: auto; /* override parent’s none */
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.w-datepicker-button:not(:hover) {
|
|
72
|
+
background-color: var(--w-s-color-background) !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
input[type='date']::-webkit-inner-spin-button,
|
|
76
|
+
input[type='date']::-webkit-calendar-picker-indicator {
|
|
77
|
+
display: none;
|
|
78
|
+
-webkit-appearance: none;
|
|
79
|
+
}
|
|
80
|
+
input[type='date'],
|
|
81
|
+
input[type='time'],
|
|
82
|
+
input[type='datetime-local'],
|
|
83
|
+
input[type='month'] {
|
|
84
|
+
-webkit-appearance: none;
|
|
85
|
+
-moz-appearance: none;
|
|
86
|
+
appearance: none;
|
|
87
|
+
}
|
|
88
|
+
/* Temporary dropdown, should probably use the appropriate component when it is done */
|
|
89
|
+
.w-dropdown__popover {
|
|
90
|
+
position: absolute;
|
|
91
|
+
width: max-content;
|
|
92
|
+
background-color: var(--w-s-color-background);
|
|
93
|
+
box-shadow: var(--w-shadow-s);
|
|
94
|
+
z-index: 100;
|
|
95
|
+
border-radius: 8px;
|
|
96
|
+
visibility: hidden;
|
|
97
|
+
}
|
|
98
|
+
.w-dropdown__popover--open {
|
|
99
|
+
visibility: visible;
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses an ISO-8601 string into a JS Date.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - YYYY-MM-DD
|
|
6
|
+
* - YYYY-MM-DDThh:mm:ss(.sss)?(Z|±hh:mm)?
|
|
7
|
+
*
|
|
8
|
+
* @param {string} isoString
|
|
9
|
+
* @returns {Date}
|
|
10
|
+
* @throws {TypeError} if input isn’t a string
|
|
11
|
+
* @throws {Error} if string is not a valid ISO-8601 date
|
|
12
|
+
*/
|
|
13
|
+
export declare function fromISOToDate(isoString: string): Date | null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const dateOnlyRe = /^\d{4}-\d{2}-\d{2}$/;
|
|
2
|
+
/**
|
|
3
|
+
* Parses an ISO-8601 string into a JS Date.
|
|
4
|
+
*
|
|
5
|
+
* Supports:
|
|
6
|
+
* - YYYY-MM-DD
|
|
7
|
+
* - YYYY-MM-DDThh:mm:ss(.sss)?(Z|±hh:mm)?
|
|
8
|
+
*
|
|
9
|
+
* @param {string} isoString
|
|
10
|
+
* @returns {Date}
|
|
11
|
+
* @throws {TypeError} if input isn’t a string
|
|
12
|
+
* @throws {Error} if string is not a valid ISO-8601 date
|
|
13
|
+
*/
|
|
14
|
+
export function fromISOToDate(isoString) {
|
|
15
|
+
if (typeof isoString !== 'string') {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
// If it's a bare date (YYYY-MM-DD), treat it as UTC midnight
|
|
19
|
+
let normalized = isoString;
|
|
20
|
+
if (dateOnlyRe.test(isoString)) {
|
|
21
|
+
normalized = `${isoString}T00:00:00Z`;
|
|
22
|
+
}
|
|
23
|
+
const timestamp = Date.parse(normalized);
|
|
24
|
+
if (Number.isNaN(timestamp)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return new Date(timestamp);
|
|
28
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StoryObj } from '@storybook/react';
|
|
3
|
+
import { DeadToggle } from './react';
|
|
4
|
+
declare const _default: {
|
|
5
|
+
title: string;
|
|
6
|
+
render(args: Omit<React.HTMLAttributes<import(".").WarpDeadToggle>, "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "type" | "invalid" | "checked" | "indeterminate" | "indeterminateMarker"> & {} & Partial<Omit<import(".").WarpDeadToggle, keyof HTMLElement>> & React.RefAttributes<import(".").WarpDeadToggle>): React.JSX.Element;
|
|
7
|
+
component: import("@lit/react").ReactWebComponent<import(".").WarpDeadToggle, {}>;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
10
|
+
export type Story = StoryObj<typeof DeadToggle>;
|
|
11
|
+
export declare const Radio: Story;
|
|
12
|
+
export declare const Checkbox: Story;
|
|
13
|
+
export declare const Indeterminate: Story;
|
|
14
|
+
export declare const Checked: Story;
|
|
15
|
+
export declare const Invalid: Story;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { DeadToggle } from './react';
|
|
3
|
+
export default {
|
|
4
|
+
title: 'Forms/Dead toggle',
|
|
5
|
+
render(args) {
|
|
6
|
+
return React.createElement(DeadToggle, { ...args });
|
|
7
|
+
},
|
|
8
|
+
component: DeadToggle,
|
|
9
|
+
};
|
|
10
|
+
export const Radio = {
|
|
11
|
+
args: {
|
|
12
|
+
type: 'radio',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export const Checkbox = {
|
|
16
|
+
args: {
|
|
17
|
+
type: 'checkbox',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const Indeterminate = {
|
|
21
|
+
args: {
|
|
22
|
+
indeterminate: true,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
export const Checked = {
|
|
26
|
+
args: {
|
|
27
|
+
checked: true,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
export const Invalid = {
|
|
31
|
+
args: {
|
|
32
|
+
invalid: true,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
import type { WarpDeadToggle } from './index.js';
|
|
3
|
+
import './index.js';
|
|
4
|
+
declare const args: Partial<WarpDeadToggle> & {
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
};
|
|
7
|
+
declare const meta: Meta<typeof args>;
|
|
8
|
+
export default meta;
|
|
9
|
+
type Story = StoryObj<typeof args>;
|
|
10
|
+
export declare const Radio: Story;
|
|
11
|
+
export declare const Checkbox: Story;
|
|
12
|
+
export declare const Indeterminate: Story;
|
|
13
|
+
export declare const Checked: Story;
|
|
14
|
+
export declare const Invalid: Story;
|