@jobber/components 8.3.0 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ActivityIndicator.d.ts +1 -0
- package/ActivityIndicator.js +17 -0
- package/dist/ActivityIndicator/ActivityIndicator.d.ts +38 -0
- package/dist/ActivityIndicator/index.cjs +9 -0
- package/dist/ActivityIndicator/index.d.ts +2 -0
- package/dist/ActivityIndicator/index.mjs +3 -0
- package/dist/ActivityIndicator-cjs.js +27 -0
- package/dist/ActivityIndicator-es.js +25 -0
- package/dist/Spinner/Spinner.d.ts +6 -0
- package/dist/Spinner-cjs.js +3 -0
- package/dist/Spinner-es.js +3 -0
- package/dist/docs/ActivityIndicator/ActivityIndicator.md +67 -0
- package/dist/docs/Spinner/Spinner.md +9 -1
- package/dist/docs/index.md +1 -0
- package/dist/index.cjs +3 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +2 -1
- package/dist/styles.css +279 -0
- package/dist/utils/meta/meta.json +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/ActivityIndicator";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var ActivityIndicator = require("./dist/ActivityIndicator");
|
|
8
|
+
|
|
9
|
+
Object.keys(ActivityIndicator).forEach(function(key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
Object.defineProperty(exports, key, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function get() {
|
|
14
|
+
return ActivityIndicator[key];
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { CSSProperties } from "react";
|
|
3
|
+
export interface ActivityIndicatorProps {
|
|
4
|
+
/**
|
|
5
|
+
* Visual size. `base` renders at 32px, `small` renders at 16px.
|
|
6
|
+
*
|
|
7
|
+
* @default "base"
|
|
8
|
+
*/
|
|
9
|
+
readonly size?: "small" | "base";
|
|
10
|
+
/**
|
|
11
|
+
* Accessible label exposed via `aria-label` on the root element. Override
|
|
12
|
+
* to localize or to describe the specific activity (e.g. "Uploading file").
|
|
13
|
+
*
|
|
14
|
+
* @default "Loading"
|
|
15
|
+
*/
|
|
16
|
+
readonly ariaLabel?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Custom class name merged onto the root element alongside the component's
|
|
19
|
+
* own classes.
|
|
20
|
+
*/
|
|
21
|
+
readonly className?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Custom inline styles applied to the root element.
|
|
24
|
+
*/
|
|
25
|
+
readonly style?: CSSProperties;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `ActivityIndicator` communicates an indeterminate activity that the user
|
|
29
|
+
* cannot directly control or measure — loading, fetching, or waiting on an
|
|
30
|
+
* external system.
|
|
31
|
+
*
|
|
32
|
+
* For determinate progress (a known fraction completed), use
|
|
33
|
+
* `ProgressIndicator` instead (forthcoming).
|
|
34
|
+
*
|
|
35
|
+
* For now, the legacy `Spinner` component also remains available; new code
|
|
36
|
+
* should prefer `ActivityIndicator`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ActivityIndicator({ size, ariaLabel, className, style, }: ActivityIndicatorProps): React.JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var classnames = require('classnames');
|
|
5
|
+
|
|
6
|
+
var styles = {"indicator":"YST686vLR3c-","screenReaderOnly":"MmNHh-oCyxc-","small":"_888S5Y2IeZ8-","svg":"Av9z-aLocss-","indicatorLinearRotate":"WvHFS--Nm80-","track":"VDTWabJptKI-","arc":"_9XO0290QNCY-","indicatorRotateArc":"SHHICknKvqA-","indicatorExpandArc":"_0m0Nzc5awnA-","indicatorReducedPulse":"_4dXQsbprq3s-","spinning":"IZCteJUCKio-"};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* `ActivityIndicator` communicates an indeterminate activity that the user
|
|
10
|
+
* cannot directly control or measure — loading, fetching, or waiting on an
|
|
11
|
+
* external system.
|
|
12
|
+
*
|
|
13
|
+
* For determinate progress (a known fraction completed), use
|
|
14
|
+
* `ProgressIndicator` instead (forthcoming).
|
|
15
|
+
*
|
|
16
|
+
* For now, the legacy `Spinner` component also remains available; new code
|
|
17
|
+
* should prefer `ActivityIndicator`.
|
|
18
|
+
*/
|
|
19
|
+
function ActivityIndicator({ size = "base", ariaLabel = "Loading", className, style, }) {
|
|
20
|
+
return (React.createElement("div", { role: "status", "aria-label": ariaLabel, className: classnames(styles.indicator, size === "small" && styles.small, className), style: style },
|
|
21
|
+
React.createElement("span", { className: styles.screenReaderOnly }, ariaLabel),
|
|
22
|
+
React.createElement("svg", { className: styles.svg, viewBox: "0 0 48 48", focusable: "false", "aria-hidden": "true" },
|
|
23
|
+
React.createElement("circle", { className: styles.track, cx: "24", cy: "24", r: "20" }),
|
|
24
|
+
React.createElement("circle", { className: styles.arc, cx: "24", cy: "24", r: "20" }))));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
exports.ActivityIndicator = ActivityIndicator;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import classnames from 'classnames';
|
|
3
|
+
|
|
4
|
+
var styles = {"indicator":"YST686vLR3c-","screenReaderOnly":"MmNHh-oCyxc-","small":"_888S5Y2IeZ8-","svg":"Av9z-aLocss-","indicatorLinearRotate":"WvHFS--Nm80-","track":"VDTWabJptKI-","arc":"_9XO0290QNCY-","indicatorRotateArc":"SHHICknKvqA-","indicatorExpandArc":"_0m0Nzc5awnA-","indicatorReducedPulse":"_4dXQsbprq3s-","spinning":"IZCteJUCKio-"};
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `ActivityIndicator` communicates an indeterminate activity that the user
|
|
8
|
+
* cannot directly control or measure — loading, fetching, or waiting on an
|
|
9
|
+
* external system.
|
|
10
|
+
*
|
|
11
|
+
* For determinate progress (a known fraction completed), use
|
|
12
|
+
* `ProgressIndicator` instead (forthcoming).
|
|
13
|
+
*
|
|
14
|
+
* For now, the legacy `Spinner` component also remains available; new code
|
|
15
|
+
* should prefer `ActivityIndicator`.
|
|
16
|
+
*/
|
|
17
|
+
function ActivityIndicator({ size = "base", ariaLabel = "Loading", className, style, }) {
|
|
18
|
+
return (React__default.createElement("div", { role: "status", "aria-label": ariaLabel, className: classnames(styles.indicator, size === "small" && styles.small, className), style: style },
|
|
19
|
+
React__default.createElement("span", { className: styles.screenReaderOnly }, ariaLabel),
|
|
20
|
+
React__default.createElement("svg", { className: styles.svg, viewBox: "0 0 48 48", focusable: "false", "aria-hidden": "true" },
|
|
21
|
+
React__default.createElement("circle", { className: styles.track, cx: "24", cy: "24", r: "20" }),
|
|
22
|
+
React__default.createElement("circle", { className: styles.arc, cx: "24", cy: "24", r: "20" }))));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { ActivityIndicator as A };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use `ActivityIndicator` instead.
|
|
4
|
+
*/
|
|
2
5
|
interface SpinnerProps {
|
|
3
6
|
/**
|
|
4
7
|
* Specifies the size of the spinner
|
|
@@ -12,5 +15,8 @@ interface SpinnerProps {
|
|
|
12
15
|
*/
|
|
13
16
|
readonly inline?: boolean;
|
|
14
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Use `ActivityIndicator` instead.
|
|
20
|
+
*/
|
|
15
21
|
export declare function Spinner({ size, inline }: SpinnerProps): React.JSX.Element;
|
|
16
22
|
export {};
|
package/dist/Spinner-cjs.js
CHANGED
|
@@ -5,6 +5,9 @@ var classnames = require('classnames');
|
|
|
5
5
|
|
|
6
6
|
var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"bMfynkzmlL4-","inline":"NA68eWblbLo-","spinning":"aCBq1WrkI4M-"};
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated Use `ActivityIndicator` instead.
|
|
10
|
+
*/
|
|
8
11
|
function Spinner({ size = "base", inline }) {
|
|
9
12
|
const spinnerStyles = classnames(styles.spinner, {
|
|
10
13
|
[styles.small]: size === "small",
|
package/dist/Spinner-es.js
CHANGED
|
@@ -3,6 +3,9 @@ import classnames from 'classnames';
|
|
|
3
3
|
|
|
4
4
|
var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"bMfynkzmlL4-","inline":"NA68eWblbLo-","spinning":"aCBq1WrkI4M-"};
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use `ActivityIndicator` instead.
|
|
8
|
+
*/
|
|
6
9
|
function Spinner({ size = "base", inline }) {
|
|
7
10
|
const spinnerStyles = classnames(styles.spinner, {
|
|
8
11
|
[styles.small]: size === "small",
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Activity Indicator
|
|
2
|
+
|
|
3
|
+
`ActivityIndicator` is used to communicate an **indeterminate** activity the
|
|
4
|
+
user cannot directly control or measure — loading, fetching, or waiting on an
|
|
5
|
+
external system.
|
|
6
|
+
|
|
7
|
+
Use `ActivityIndicator` when the loading time or fraction of progress is
|
|
8
|
+
unknown. If you know the fraction of progress (for example, "3 of 4 files
|
|
9
|
+
uploaded"), use `ProgressBar` instead. A `ProgressIndicator` counterpart that
|
|
10
|
+
will subsume `ProgressBar` under the new naming is forthcoming.
|
|
11
|
+
|
|
12
|
+
## Design & usage guidelines
|
|
13
|
+
|
|
14
|
+
The default `ActivityIndicator` size is `base` (32px) and can be used in most
|
|
15
|
+
cases. The `small` size (16px) should be used on individual elements of an
|
|
16
|
+
interface (e.g. inside a `Button` or `Card`) or when sitting next to short
|
|
17
|
+
inline text.
|
|
18
|
+
|
|
19
|
+
Layout is the consumer's responsibility — `ActivityIndicator` does not expose
|
|
20
|
+
an `inline` prop. Place it inside your own flex / inline-block container, or
|
|
21
|
+
pass a `className` / `style`, to control surrounding layout.
|
|
22
|
+
|
|
23
|
+
## Accessibility
|
|
24
|
+
|
|
25
|
+
`ActivityIndicator` announces itself politely to assistive technology:
|
|
26
|
+
|
|
27
|
+
* `role="status"` marks the element as a polite live region, appropriate for
|
|
28
|
+
a non-urgent loading state.
|
|
29
|
+
* `aria-label` defaults to the literal English string `"Loading"`. Pass a
|
|
30
|
+
custom `ariaLabel` to localize or to describe the specific activity
|
|
31
|
+
(e.g. `ariaLabel="Uploading file"`).
|
|
32
|
+
|
|
33
|
+
The indicator does not participate in the keyboard tab order.
|
|
34
|
+
|
|
35
|
+
### Reduced motion
|
|
36
|
+
|
|
37
|
+
When the user's operating system reports
|
|
38
|
+
[`prefers-reduced-motion: reduce`](https://developer.mozilla.org/docs/Web/CSS/@media/prefers-reduced-motion),
|
|
39
|
+
the indicator hides its rocking and rotating layers, repaints a single
|
|
40
|
+
static ring in the icon foreground colour, and gently pulses its opacity so
|
|
41
|
+
the indicator still reads as "busy" without rotational motion.
|
|
42
|
+
|
|
43
|
+
## Relationship to Spinner
|
|
44
|
+
|
|
45
|
+
The legacy [Spinner](../Spinner/Spinner.md) component remains available and
|
|
46
|
+
unchanged. New code should prefer `ActivityIndicator`. A follow-up change is
|
|
47
|
+
expected to deprecate `Spinner` in favour of `ActivityIndicator`.
|
|
48
|
+
|
|
49
|
+
## Mobile
|
|
50
|
+
|
|
51
|
+
On mobile (`@jobber/components-native`), `ActivityIndicator` uses the
|
|
52
|
+
[ActivityIndicator](https://reactnative.dev/docs/activityIndicator) core
|
|
53
|
+
component from React Native.
|
|
54
|
+
|
|
55
|
+
## Mockup
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Props
|
|
59
|
+
|
|
60
|
+
### Web
|
|
61
|
+
|
|
62
|
+
| Prop | Type | Required | Default | Description |
|
|
63
|
+
|------|------|----------|---------|-------------|
|
|
64
|
+
| `ariaLabel` | `string` | No | `Loading` | Accessible label exposed via `aria-label` on the root element. Override to localize or to describe the specific activ... |
|
|
65
|
+
| `className` | `string` | No | — | Custom class name merged onto the root element alongside the component's own classes. |
|
|
66
|
+
| `size` | `"base" | "small"` | No | `base` | Visual size. `base` renders at 32px, `small` renders at 16px. |
|
|
67
|
+
| `style` | `CSSProperties` | No | — | Custom inline styles applied to the root element. |
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Spinner
|
|
2
2
|
|
|
3
|
+
> **Deprecated.** Use
|
|
4
|
+
> [ActivityIndicator](../ActivityIndicator/ActivityIndicator.md) for new work.
|
|
5
|
+
> `ActivityIndicator` is the supported indeterminate loading indicator going
|
|
6
|
+
> forward — it offers the same semantic with a cleaner prop surface, a polite
|
|
7
|
+
> `role="status"`, theme-adaptive tokens, Material-style three-layer
|
|
8
|
+
> animation, and a `prefers-reduced-motion` fallback. `Spinner` continues to
|
|
9
|
+
> work unchanged for existing call sites.
|
|
10
|
+
|
|
3
11
|
Spinner is used to indicate the loading of content where the actual amount of
|
|
4
12
|
loading time or progress is unknown.
|
|
5
13
|
|
|
@@ -32,7 +40,7 @@ If the amount of progress or loading time is known, use
|
|
|
32
40
|
process.
|
|
33
41
|
|
|
34
42
|
To indicate loading content in mobile applications, refer to
|
|
35
|
-
[ActivityIndicator](/
|
|
43
|
+
[ActivityIndicator](../ActivityIndicator/ActivityIndicator.md).
|
|
36
44
|
|
|
37
45
|
|
|
38
46
|
## Props
|
package/dist/docs/index.md
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var ActivityIndicator = require('./ActivityIndicator-cjs.js');
|
|
3
4
|
var AnimatedPresence = require('./AnimatedPresence-cjs.js');
|
|
4
5
|
var AnimatedSwitcher = require('./AnimatedSwitcher-cjs.js');
|
|
5
6
|
var AtlantisContext = require('./AtlantisContext-cjs.js');
|
|
@@ -93,6 +94,7 @@ var Tiles = require('./Tiles-cjs.js');
|
|
|
93
94
|
var showToast = require('./showToast-cjs.js');
|
|
94
95
|
var Tooltip = require('./Tooltip-cjs.js');
|
|
95
96
|
var Typography = require('./Typography-cjs.js');
|
|
97
|
+
require('classnames');
|
|
96
98
|
require('framer-motion');
|
|
97
99
|
require('@jobber/design');
|
|
98
100
|
require('./_commonjsHelpers-cjs.js');
|
|
@@ -110,7 +112,6 @@ require('./index.esm-cjs.js');
|
|
|
110
112
|
require('react/jsx-runtime');
|
|
111
113
|
require('react-dom');
|
|
112
114
|
require('./floating-ui.react-dom-cjs.js');
|
|
113
|
-
require('classnames');
|
|
114
115
|
require('./maxHeight-cjs.js');
|
|
115
116
|
require('./tslib.es6-cjs.js');
|
|
116
117
|
require('react-hook-form');
|
|
@@ -205,6 +206,7 @@ function isNormalClick(evt) {
|
|
|
205
206
|
!evt.altKey);
|
|
206
207
|
}
|
|
207
208
|
|
|
209
|
+
exports.ActivityIndicator = ActivityIndicator.ActivityIndicator;
|
|
208
210
|
exports.AnimatedPresence = AnimatedPresence.AnimatedPresence;
|
|
209
211
|
exports.AnimatedSwitcher = AnimatedSwitcher.AnimatedSwitcher;
|
|
210
212
|
exports.AtlantisContext = AtlantisContext.AtlantisContext;
|
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { A as ActivityIndicator } from './ActivityIndicator-es.js';
|
|
1
2
|
export { A as AnimatedPresence } from './AnimatedPresence-es.js';
|
|
2
3
|
export { A as AnimatedSwitcher } from './AnimatedSwitcher-es.js';
|
|
3
4
|
export { A as AtlantisContext, a as atlantisContextDefaultValues, u as useAtlantisContext } from './AtlantisContext-es.js';
|
|
@@ -91,6 +92,7 @@ export { T as Tiles } from './Tiles-es.js';
|
|
|
91
92
|
export { T as Toast, s as showToast } from './showToast-es.js';
|
|
92
93
|
export { T as Tooltip } from './Tooltip-es.js';
|
|
93
94
|
export { T as Typography } from './Typography-es.js';
|
|
95
|
+
import 'classnames';
|
|
94
96
|
import 'framer-motion';
|
|
95
97
|
import '@jobber/design';
|
|
96
98
|
import './_commonjsHelpers-es.js';
|
|
@@ -108,7 +110,6 @@ import './index.esm-es.js';
|
|
|
108
110
|
import 'react/jsx-runtime';
|
|
109
111
|
import 'react-dom';
|
|
110
112
|
import './floating-ui.react-dom-es.js';
|
|
111
|
-
import 'classnames';
|
|
112
113
|
import './maxHeight-es.js';
|
|
113
114
|
import './tslib.es6-es.js';
|
|
114
115
|
import 'react-hook-form';
|
package/dist/styles.css
CHANGED
|
@@ -1,3 +1,282 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ActivityIndicator
|
|
3
|
+
*
|
|
4
|
+
* Indeterminate three-layer ring, following Material Web's canonical
|
|
5
|
+
* SVG-based pattern:
|
|
6
|
+
* 1. The <svg> rotates continuously at a constant linear speed (Layer 1).
|
|
7
|
+
* 2. The active <circle> rotates through 8 discrete phases per cycle
|
|
8
|
+
* (Layer 2).
|
|
9
|
+
* 3. The active <circle>'s stroke-dasharray expands and contracts so the
|
|
10
|
+
* visible arc length grows and shrinks (Layer 3); stroke-dashoffset
|
|
11
|
+
* slides the arc around the ring across the cycle.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
.YST686vLR3c- {
|
|
15
|
+
position: relative;
|
|
16
|
+
width: 32px;
|
|
17
|
+
width: var(--space-larger);
|
|
18
|
+
height: 32px;
|
|
19
|
+
height: var(--space-larger);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* Visually hide an element from sighted users while keeping it in the
|
|
24
|
+
* accessibility tree and the live-region text content. Used for the
|
|
25
|
+
* mount-time "Loading" announcement on role=\"status\". Mirrors the
|
|
26
|
+
* .screenReaderOnly pattern already used elsewhere in @jobber/components.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
.MmNHh-oCyxc- {
|
|
30
|
+
position: absolute;
|
|
31
|
+
width: 1px;
|
|
32
|
+
height: 1px;
|
|
33
|
+
margin: -1px;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
clip: rect(0, 0, 0, 0);
|
|
36
|
+
white-space: nowrap;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
._888S5Y2IeZ8- {
|
|
40
|
+
width: 16px;
|
|
41
|
+
width: var(--space-base);
|
|
42
|
+
height: 16px;
|
|
43
|
+
height: var(--space-base);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* Layer 1 — continuous linear rotation on the SVG.
|
|
48
|
+
*
|
|
49
|
+
* The three indicator durations (1568ms outer rotation, 5332ms inner
|
|
50
|
+
* 8-phase cycle, 1333ms arc expand/contract) are taken from Material
|
|
51
|
+
* Web's published progress-motion spec. They are tuned against each
|
|
52
|
+
* other to produce the canonical Material rhythm and are intentionally
|
|
53
|
+
* inlined as literals because no other component currently consumes
|
|
54
|
+
* them; promote them to design tokens once a second consumer (e.g. a
|
|
55
|
+
* future `ProgressIndicator`) needs the same values.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
.Av9z-aLocss- {
|
|
59
|
+
display: block;
|
|
60
|
+
width: 100%;
|
|
61
|
+
height: 100%;
|
|
62
|
+
-webkit-animation: WvHFS--Nm80- 1568ms linear infinite;
|
|
63
|
+
animation: WvHFS--Nm80- 1568ms linear infinite;
|
|
64
|
+
will-change: transform;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Static background ring drawn beneath the moving arc. */
|
|
68
|
+
|
|
69
|
+
.VDTWabJptKI- {
|
|
70
|
+
fill: none;
|
|
71
|
+
stroke: hsl(0, 0%, 93%);
|
|
72
|
+
stroke: var(--color-disabled--secondary);
|
|
73
|
+
stroke-width: 4;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
._888S5Y2IeZ8- .VDTWabJptKI- {
|
|
77
|
+
stroke-width: 6;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Layer 2 + 3 — the active arc.
|
|
82
|
+
*
|
|
83
|
+
* The circle has circumference 2π·20 ≈ 125.66 (SVG units). The dasharray
|
|
84
|
+
* (visible, gap) interpolates so the visible portion grows from ~1 unit to
|
|
85
|
+
* ~95 units, while the dashoffset slides the arc around the ring. The
|
|
86
|
+
* combined cycle is the canonical Material rhythm.
|
|
87
|
+
*
|
|
88
|
+
* stroke-linecap: round produces the soft pill-shaped tips on the arc.
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
._9XO0290QNCY- {
|
|
92
|
+
fill: none;
|
|
93
|
+
stroke: hsl(198, 35%, 21%);
|
|
94
|
+
stroke: var(--color-interactive--subtle);
|
|
95
|
+
stroke-width: 4;
|
|
96
|
+
stroke-linecap: round;
|
|
97
|
+
-webkit-transform-origin: center;
|
|
98
|
+
transform-origin: center;
|
|
99
|
+
-webkit-animation:
|
|
100
|
+
SHHICknKvqA- 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,
|
|
101
|
+
_0m0Nzc5awnA- 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
|
102
|
+
animation:
|
|
103
|
+
SHHICknKvqA- 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,
|
|
104
|
+
_0m0Nzc5awnA- 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
._888S5Y2IeZ8- ._9XO0290QNCY- {
|
|
108
|
+
stroke-width: 6;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@-webkit-keyframes WvHFS--Nm80- {
|
|
112
|
+
to {
|
|
113
|
+
-webkit-transform: rotate(360deg);
|
|
114
|
+
transform: rotate(360deg);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes WvHFS--Nm80- {
|
|
119
|
+
to {
|
|
120
|
+
-webkit-transform: rotate(360deg);
|
|
121
|
+
transform: rotate(360deg);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Layer 2 — 8-phase 1080° rotation on the active arc. */
|
|
126
|
+
|
|
127
|
+
@-webkit-keyframes SHHICknKvqA- {
|
|
128
|
+
12.5% {
|
|
129
|
+
-webkit-transform: rotate(135deg);
|
|
130
|
+
transform: rotate(135deg);
|
|
131
|
+
}
|
|
132
|
+
25% {
|
|
133
|
+
-webkit-transform: rotate(270deg);
|
|
134
|
+
transform: rotate(270deg);
|
|
135
|
+
}
|
|
136
|
+
37.5% {
|
|
137
|
+
-webkit-transform: rotate(405deg);
|
|
138
|
+
transform: rotate(405deg);
|
|
139
|
+
}
|
|
140
|
+
50% {
|
|
141
|
+
-webkit-transform: rotate(540deg);
|
|
142
|
+
transform: rotate(540deg);
|
|
143
|
+
}
|
|
144
|
+
62.5% {
|
|
145
|
+
-webkit-transform: rotate(675deg);
|
|
146
|
+
transform: rotate(675deg);
|
|
147
|
+
}
|
|
148
|
+
75% {
|
|
149
|
+
-webkit-transform: rotate(810deg);
|
|
150
|
+
transform: rotate(810deg);
|
|
151
|
+
}
|
|
152
|
+
87.5% {
|
|
153
|
+
-webkit-transform: rotate(945deg);
|
|
154
|
+
transform: rotate(945deg);
|
|
155
|
+
}
|
|
156
|
+
100% {
|
|
157
|
+
-webkit-transform: rotate(1080deg);
|
|
158
|
+
transform: rotate(1080deg);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@keyframes SHHICknKvqA- {
|
|
163
|
+
12.5% {
|
|
164
|
+
-webkit-transform: rotate(135deg);
|
|
165
|
+
transform: rotate(135deg);
|
|
166
|
+
}
|
|
167
|
+
25% {
|
|
168
|
+
-webkit-transform: rotate(270deg);
|
|
169
|
+
transform: rotate(270deg);
|
|
170
|
+
}
|
|
171
|
+
37.5% {
|
|
172
|
+
-webkit-transform: rotate(405deg);
|
|
173
|
+
transform: rotate(405deg);
|
|
174
|
+
}
|
|
175
|
+
50% {
|
|
176
|
+
-webkit-transform: rotate(540deg);
|
|
177
|
+
transform: rotate(540deg);
|
|
178
|
+
}
|
|
179
|
+
62.5% {
|
|
180
|
+
-webkit-transform: rotate(675deg);
|
|
181
|
+
transform: rotate(675deg);
|
|
182
|
+
}
|
|
183
|
+
75% {
|
|
184
|
+
-webkit-transform: rotate(810deg);
|
|
185
|
+
transform: rotate(810deg);
|
|
186
|
+
}
|
|
187
|
+
87.5% {
|
|
188
|
+
-webkit-transform: rotate(945deg);
|
|
189
|
+
transform: rotate(945deg);
|
|
190
|
+
}
|
|
191
|
+
100% {
|
|
192
|
+
-webkit-transform: rotate(1080deg);
|
|
193
|
+
transform: rotate(1080deg);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* Layer 3 — expand/contract the visible arc length via stroke-dasharray
|
|
199
|
+
* while shifting it around the ring via stroke-dashoffset. The "200" gap
|
|
200
|
+
* value exceeds the circle's circumference, ensuring only one stroke
|
|
201
|
+
* segment is visible at a time.
|
|
202
|
+
*/
|
|
203
|
+
|
|
204
|
+
@-webkit-keyframes _0m0Nzc5awnA- {
|
|
205
|
+
0% {
|
|
206
|
+
stroke-dasharray: 1, 200;
|
|
207
|
+
stroke-dashoffset: 0;
|
|
208
|
+
}
|
|
209
|
+
50% {
|
|
210
|
+
stroke-dasharray: 90, 200;
|
|
211
|
+
stroke-dashoffset: -35;
|
|
212
|
+
}
|
|
213
|
+
100% {
|
|
214
|
+
stroke-dasharray: 90, 200;
|
|
215
|
+
stroke-dashoffset: -125;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@keyframes _0m0Nzc5awnA- {
|
|
220
|
+
0% {
|
|
221
|
+
stroke-dasharray: 1, 200;
|
|
222
|
+
stroke-dashoffset: 0;
|
|
223
|
+
}
|
|
224
|
+
50% {
|
|
225
|
+
stroke-dasharray: 90, 200;
|
|
226
|
+
stroke-dashoffset: -35;
|
|
227
|
+
}
|
|
228
|
+
100% {
|
|
229
|
+
stroke-dasharray: 90, 200;
|
|
230
|
+
stroke-dashoffset: -125;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@-webkit-keyframes _4dXQsbprq3s- {
|
|
235
|
+
from {
|
|
236
|
+
opacity: 1;
|
|
237
|
+
}
|
|
238
|
+
to {
|
|
239
|
+
opacity: 0.35;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
@keyframes _4dXQsbprq3s- {
|
|
244
|
+
from {
|
|
245
|
+
opacity: 1;
|
|
246
|
+
}
|
|
247
|
+
to {
|
|
248
|
+
opacity: 0.35;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/*
|
|
253
|
+
* Reduced motion fallback. Hide the active arc entirely; repaint the static
|
|
254
|
+
* track in the icon foreground colour and pulse its opacity so the
|
|
255
|
+
* indicator still reads as "busy" without rotational motion.
|
|
256
|
+
*
|
|
257
|
+
* A naive `animation: none` would freeze a partial arc mid-cycle and lose
|
|
258
|
+
* the busy affordance.
|
|
259
|
+
*/
|
|
260
|
+
|
|
261
|
+
@media (prefers-reduced-motion: reduce) {
|
|
262
|
+
.Av9z-aLocss-,
|
|
263
|
+
._9XO0290QNCY- {
|
|
264
|
+
-webkit-animation: none;
|
|
265
|
+
animation: none;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
._9XO0290QNCY- {
|
|
269
|
+
display: none;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.VDTWabJptKI- {
|
|
273
|
+
stroke: hsl(198, 35%, 21%);
|
|
274
|
+
stroke: var(--color-interactive--subtle);
|
|
275
|
+
-webkit-animation: _4dXQsbprq3s- 2s ease-in-out infinite alternate;
|
|
276
|
+
animation: _4dXQsbprq3s- 2s ease-in-out infinite alternate;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
1
280
|
.P6HrDSaI0Ac- {
|
|
2
281
|
display: contents;
|
|
3
282
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -25,6 +25,11 @@
|
|
|
25
25
|
"import": "./dist/unstyledPrimitives/index.mjs",
|
|
26
26
|
"require": "./dist/unstyledPrimitives/index.cjs"
|
|
27
27
|
},
|
|
28
|
+
"./ActivityIndicator": {
|
|
29
|
+
"types": "./dist/ActivityIndicator/index.d.ts",
|
|
30
|
+
"import": "./dist/ActivityIndicator/index.mjs",
|
|
31
|
+
"require": "./dist/ActivityIndicator/index.cjs"
|
|
32
|
+
},
|
|
28
33
|
"./AnimatedPresence": {
|
|
29
34
|
"types": "./dist/AnimatedPresence/index.d.ts",
|
|
30
35
|
"import": "./dist/AnimatedPresence/index.mjs",
|
|
@@ -508,7 +513,7 @@
|
|
|
508
513
|
"devDependencies": {
|
|
509
514
|
"@apollo/client": "^3.7.10",
|
|
510
515
|
"@csstools/postcss-global-data": "^1.0.3",
|
|
511
|
-
"@jobber/design": "0.101.
|
|
516
|
+
"@jobber/design": "0.101.1",
|
|
512
517
|
"@jobber/hooks": "2.20.1",
|
|
513
518
|
"@rollup/plugin-alias": "^5.1.0",
|
|
514
519
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
@@ -563,5 +568,5 @@
|
|
|
563
568
|
"> 1%",
|
|
564
569
|
"IE 10"
|
|
565
570
|
],
|
|
566
|
-
"gitHead": "
|
|
571
|
+
"gitHead": "7b859533f0b0482ad30654fb0fde5d41c2d918ba"
|
|
567
572
|
}
|