@k8slens/lds-tips 0.1.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.
Files changed (39) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +153 -0
  3. package/lib/cjs/Tip/Tip.d.ts +33 -0
  4. package/lib/cjs/Tip/Tip.js +1 -0
  5. package/lib/cjs/Tip/Tip.module.css.js +1 -0
  6. package/lib/cjs/TipPointer/TipPointer.d.ts +16 -0
  7. package/lib/cjs/TipPointer/TipPointer.js +1 -0
  8. package/lib/cjs/TipPointer/TipPointer.module.css.js +1 -0
  9. package/lib/cjs/Tips/Step.d.ts +13 -0
  10. package/lib/cjs/Tips/Step.js +1 -0
  11. package/lib/cjs/Tips/Step.module.css.js +1 -0
  12. package/lib/cjs/Tips/Steps.d.ts +32 -0
  13. package/lib/cjs/Tips/Steps.js +1 -0
  14. package/lib/cjs/Tips/Tips.d.ts +52 -0
  15. package/lib/cjs/Tips/Tips.js +1 -0
  16. package/lib/cjs/_virtual/_tslib.js +1 -0
  17. package/lib/cjs/components.d.ts +2 -0
  18. package/lib/cjs/index.css +1 -0
  19. package/lib/cjs/index.d.ts +1 -0
  20. package/lib/cjs/index.js +1 -0
  21. package/lib/es/Tip/Tip.d.ts +33 -0
  22. package/lib/es/Tip/Tip.js +1 -0
  23. package/lib/es/Tip/Tip.module.css.js +1 -0
  24. package/lib/es/TipPointer/TipPointer.d.ts +16 -0
  25. package/lib/es/TipPointer/TipPointer.js +1 -0
  26. package/lib/es/TipPointer/TipPointer.module.css.js +1 -0
  27. package/lib/es/Tips/Step.d.ts +13 -0
  28. package/lib/es/Tips/Step.js +1 -0
  29. package/lib/es/Tips/Step.module.css.js +1 -0
  30. package/lib/es/Tips/Steps.d.ts +32 -0
  31. package/lib/es/Tips/Steps.js +1 -0
  32. package/lib/es/Tips/Tips.d.ts +52 -0
  33. package/lib/es/Tips/Tips.js +1 -0
  34. package/lib/es/_virtual/_tslib.js +1 -0
  35. package/lib/es/components.d.ts +2 -0
  36. package/lib/es/index.css +1 -0
  37. package/lib/es/index.d.ts +1 -0
  38. package/lib/es/index.js +1 -0
  39. package/package.json +62 -0
package/LICENSE ADDED
@@ -0,0 +1,17 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining a copy
2
+ of this software and associated documentation files (the "Software"), to deal
3
+ in the Software without restriction, including without limitation the rights
4
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
5
+ copies of the Software, and to permit persons to whom the Software is
6
+ furnished to do so, subject to the following conditions:
7
+
8
+ The above copyright notice and this permission notice shall be included in all
9
+ copies or substantial portions of the Software.
10
+
11
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # Lens Design System – React Tips component
2
+
3
+ ## Documentation
4
+ Browse the documentation at [lensapp.github.io/lens-design-system](http://lensapp.github.io/lens-design-system/?path=/docs/tips).
5
+
6
+ ## Usage in React apps
7
+ - run `npm i -s @k8slens/lds @k8slens/lds-tokens @k8slens/lds-tips`
8
+ - import `@k8slens/lds-tokens/lib/es/font-imports.css` in your React app to include fonts
9
+ - import `@k8slens/lds/lib/es/index.css` in your React app to include core styles
10
+ - import `@k8slens/lds-tips/lib/es/index.css` in your React app to include Tips styles
11
+ - Use in a component:
12
+
13
+ ```tsx
14
+ import { Tips } from "@k8slens/lds-tips";
15
+
16
+ import tipStore from "./path-to-my/tip-store";
17
+
18
+ export const Component = () => (
19
+ <Tips
20
+ tours={tipStore.tours}
21
+ setNextStepNumber={tipStore.setNextStepNumber}
22
+ getActiveStep={tipStore.getActiveStep}
23
+ setSkipAll={tipStore.setSkipAll}
24
+ skipped={tipStore.skipAll}
25
+ />
26
+ );
27
+ ```
28
+
29
+ ## Example using MobX
30
+
31
+ ### Tours
32
+ ```tsx
33
+ // tours.ts
34
+ import type { Tour } from "@k8slens/lds-tips/lib/es/Tips/Tips";
35
+
36
+ export default const tours: Array<Tour> = [
37
+ {
38
+ id: "tour-1",
39
+ steps: [
40
+ {
41
+ id: "first-tip",
42
+ selector: "#target-element-1",
43
+ theme: "important",
44
+ content: (
45
+ <>
46
+ <h3>This is the first tip</h3>
47
+ <p>Tip Contents</p>
48
+ </>
49
+ ),
50
+ },
51
+ {
52
+ id: "second-tip",
53
+ selector: "#target-element-2",
54
+ theme: "important",
55
+ content: (
56
+ <>
57
+ <h3>This is the second tip</h3>
58
+ <p>Another content</p>
59
+ </>
60
+ ),
61
+ },
62
+ ],
63
+ }
64
+ ]
65
+ ```
66
+
67
+ ### TipStore
68
+ ```ts
69
+ // tips-store.ts
70
+ import { action, makeObservable, observable, toJS } from "mobx";
71
+
72
+ import type { Tour, TipsProps } from "@k8slens/lds-tips/lib/es/Tips/Tips";
73
+
74
+ import tours from "./tours";
75
+
76
+ type ActiveSteps = { [key: string]: number };
77
+
78
+ type TipStoreModel = {
79
+ skipAll: TipsProps["skipAll"];
80
+ activeSteps: ActiveSteps;
81
+ };
82
+
83
+ export class TipStore {
84
+ @observable
85
+ store: TipStoreModel = {
86
+ skipAll: false,
87
+ activeSteps: {}
88
+ };
89
+ tours: Array<Tour> = tours;
90
+
91
+ constructor() {
92
+ super();
93
+
94
+ makeObservable(this);
95
+ }
96
+
97
+ @action
98
+ setSkipAll: TipsProps["setSkipAll"] = () => {
99
+ this.store.skipAll = true;
100
+ };
101
+
102
+ @action
103
+ setNextStepNumber: TipsProps["setNextStepNumber"] = (tourId: string) => {
104
+ let nextStep = 1;
105
+ if (typeof this.store.activeSteps[tourId] === "number") {
106
+ nextStep += this.store.activeSteps[tourId];
107
+ };
108
+
109
+ this.store.activeSteps = {
110
+ ...this.store.activeSteps,
111
+ [tourId]: nextStep
112
+ };
113
+
114
+ return nextStep;
115
+ };
116
+
117
+ getActiveStep: TipsProps["getActiveStep"] = (tourId: string) => {
118
+ return this.store.activeSteps[tourId] || 0;
119
+ };
120
+ }
121
+ ```
122
+
123
+ ### Component
124
+ ```tsx
125
+ // Component.tsx
126
+ import React from "react";
127
+ import { observer } from "mobx-react";
128
+
129
+ import { Tips } from "@k8slens/lds-tips";
130
+
131
+ import { TipStore } from "./TipStore";
132
+
133
+ interface Props {
134
+ tipStore: TipStore | null;
135
+ }
136
+
137
+ export const Component = observer(({ tipStore }: Props) => {
138
+
139
+ if (!tipStore) {
140
+ return null;
141
+ }
142
+
143
+ return (
144
+ <Tips
145
+ tours={tipStore.tours}
146
+ setNextStepNumber={tipStore.setNextStepNumber}
147
+ getActiveStep={tipStore.getActiveStep}
148
+ setSkipAll={tipStore.setSkipAll}
149
+ skipped={tipStore.store.skipAll}
150
+ />
151
+ );
152
+ });
153
+ ```
@@ -0,0 +1,33 @@
1
+ import React, { HTMLAttributes } from "react";
2
+ import { Placement } from "@popperjs/core";
3
+ export interface TipProps extends HTMLAttributes<HTMLDivElement> {
4
+ onDoneClick(): void;
5
+ onSkipAllClick(): void;
6
+ /**
7
+ * Popper placement. Defaults to `auto`
8
+ */
9
+ placement?: Placement;
10
+ theme?: "normal" | "important" | "white";
11
+ /**
12
+ * The target element for the popup placement
13
+ */
14
+ target: HTMLElement;
15
+ offset?: [number, number];
16
+ /**
17
+ * Optional width of the popup. If not specified, the width will be 20rem
18
+ */
19
+ width?: string;
20
+ /**
21
+ * Which element to listen for mutations on. Defaults to document.body
22
+ */
23
+ mutationsListenerElement?: HTMLElement;
24
+ /**
25
+ * Optional ref to the popup.
26
+ */
27
+ popupRef?: React.MutableRefObject<HTMLDivElement | null>;
28
+ }
29
+ /**
30
+ * Tip component. Uses [React Popper](https://popper.js.org/react-popper/) for the popup positioning.
31
+ */
32
+ declare const Tip: ({ popupRef, className, onDoneClick, onSkipAllClick, target, mutationsListenerElement, theme, id, offset, width, placement, children, ...props }: TipProps) => JSX.Element;
33
+ export default Tip;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),r=require("clsx"),a=require("react-popper"),i=require("lodash"),o=require("rooks"),s=require("./Tip.module.css.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=n(t),u=n(r),c={subtree:!0,childList:!0,attributes:!1,characterData:!1};module.exports=function(r){var n,p=r.popupRef,d=r.className,m=r.onDoneClick,f=r.onSkipAllClick,h=r.target,v=r.mutationsListenerElement,k=void 0===v?document.body:v,b=r.theme,_=r.id,w=r.offset,q=void 0===w?[20,0]:w,C=r.width,E=r.placement,N=void 0===E?"auto":E,g=r.children,y=e.__rest(r,["popupRef","className","onDoneClick","onSkipAllClick","target","mutationsListenerElement","theme","id","offset","width","placement","children"]),R=t.useRef(null),S=t.useRef(k),j=t.useState(),D=j[0],L=j[1],x=t.useCallback((function(e){L(e),p&&(p.current=e)}),[p]),A=t.useMemo((function(){return[{name:"offset",options:{offset:q}},{name:"arrow",options:{padding:6}}]}),[q]),B=a.usePopper(h,D,{placement:N,modifiers:A}),M=B.styles,G=B.attributes,O=B.update,P=i.throttle((function(){var e;null===(e=null==O?void 0:O())||void 0===e||e.catch((function(e){console.error(e)}))}),250);return o.useMutationObserver(S,P,c),l.default.createElement("div",e.__assign({ref:x,id:_},y,{className:u.default(d,s.tip,(n={},n[s.important]="important"===b,n[s.white]="white"===b,n)),style:e.__assign(e.__assign({},M.popper),{width:C||"20rem"})},G.popper),g,l.default.createElement("div",{"data-popper-arrow":!0,ref:R,className:s.caret,style:M.arrow}),l.default.createElement("div",{className:s.buttons},l.default.createElement("button",{onClick:m,className:s.okButton,"aria-controls":_},"Got it!"),l.default.createElement("button",{onClick:f,className:s.skipButton,"aria-controls":_},"Skip all tips")))};
@@ -0,0 +1 @@
1
+ "use strict";module.exports={tip:"lds-tip",important:"lds-tip--important",white:"lds-tip--white",caret:"lds-tip--caret",buttons:"lds-tip--buttons",okButton:"lds-tip--ok-button",skipButton:"lds-tip--skip-button"};
@@ -0,0 +1,16 @@
1
+ import { HTMLAttributes } from "react";
2
+ import type { Step } from "../Tips/Steps";
3
+ interface TipPointerProps extends Omit<HTMLAttributes<HTMLButtonElement>, "onClick" | "id" | "style" | "ref"> {
4
+ step: Step;
5
+ onClick: () => void;
6
+ target: HTMLElement;
7
+ hidden: boolean;
8
+ mutationsListenerElement: HTMLElement;
9
+ }
10
+ /**
11
+ * TipPointer component
12
+ *
13
+ * Used with `Tips` component to highlight a tip target.
14
+ */
15
+ export default function TipPointer({ step, onClick, target, hidden, mutationsListenerElement, ...props }: TipPointerProps): JSX.Element;
16
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../_virtual/_tslib.js"),t=require("react"),r=require("clsx"),s=require("lodash"),n=require("react-popper"),i=require("rooks"),o=require("./TipPointer.module.css.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(t),l=u(r),c={subtree:!0,childList:!0,attributes:!1,characterData:!1};module.exports=function(r){var u=r.step,f=r.onClick,p=r.target,d=r.hidden,m=r.mutationsListenerElement,_=e.__rest(r,["step","onClick","target","hidden","mutationsListenerElement"]),h=t.useRef(m),v=u.pointerOffset,b=u.placement,q=u.id,g=u.pointerStyles,k=t.useRef(null),y=t.useMemo((function(){return v?[v[1],v[0]]:[0,0]}),[v]),C=t.useState(!1),E=C[0],j=C[1],L=t.useMemo((function(){return[{name:"offset",options:{offset:y}}]}),[y]),M=n.usePopper(p,k.current,{placement:b,modifiers:L}),N=M.styles,x=M.attributes,O=M.update,P=s.throttle((function(){var e;null===(e=null==O?void 0:O())||void 0===e||e.catch((function(e){console.error(e)}))}),250);return t.useEffect((function(){j(!0)}),[]),i.useMutationObserver(h,P,c),a.default.createElement("button",e.__assign({},_,{ref:k,"data-show":E&&!d,id:"pointer-for-".concat(q),onClick:f,className:l.default(_.className,o.pointer,u.pointerClassName),style:e.__assign(e.__assign({},N.popper),g)},x.popper))};
@@ -0,0 +1 @@
1
+ "use strict";module.exports={pointer:"lds-tip-pointer--pointer",pulse:"lds-tip-pointer--pulse"};
@@ -0,0 +1,13 @@
1
+ import { Step } from "./Steps";
2
+ export interface StepProps {
3
+ target: HTMLElement;
4
+ mutationsListenerElement: HTMLElement;
5
+ goNext(): void;
6
+ setSkipAll(): void;
7
+ onPointerClick?(step: Step): void;
8
+ onClose?(step: Step): void;
9
+ onNextClick?(step: Step): void;
10
+ onSkipAllClick?(step: Step): void;
11
+ step: Step;
12
+ }
13
+ export default function StepComponent({ step, target, goNext, setSkipAll, onPointerClick, onClose, onNextClick, onSkipAllClick, mutationsListenerElement, }: StepProps): JSX.Element;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react"),t=require("rooks"),n=require("../TipPointer/TipPointer.js"),i=require("../Tip/Tip.js"),a=require("./Step.module.css.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=l(e);module.exports=function(l){var o=l.step,r=l.target,s=l.goNext,c=l.setSkipAll,p=l.onPointerClick,f=l.onClose,d=l.onNextClick,k=l.onSkipAllClick,m=l.mutationsListenerElement,C=o.theme,b=o.placement,E=o.popupWidth,h=o.popupOffset,g=o.content,S=e.useState(!1),q=S[0],j=S[1],v=e.useRef(null),w=e.useCallback((function(){j(!0),p&&p(o)}),[o,p,j]),x=e.useCallback((function(){s(),j(!1),d&&d(o)}),[o,d,s]),L=e.useCallback((function(){c(),j(!1),k&&k(o)}),[o,k,c]);return t.useOutsideClick(v,e.useCallback((function(e){e.target.id!=="pointer-for-".concat(o.id)&&(j(!1),q&&f&&f(o))}),[f,o,q])),t.useKey("Escape",e.useCallback((function(){j(!1),q&&f&&f(o)}),[f,o,q])),e.useEffect((function(){j(!1)}),[o]),t.useWindowEventListener("blur",e.useCallback((function(){j(!1),q&&f&&f(o)}),[f,o,q])),u.default.createElement(u.default.Fragment,null,u.default.createElement(n,{onClick:w,step:o,target:r,hidden:q,mutationsListenerElement:m,"aria-expanded":!!q,"aria-controls":o.id,"aria-label":"Show tip"}),u.default.createElement(i,{id:o.id,popupRef:v,className:a.step,placement:b,width:E,offset:h,"data-show":!!q,onDoneClick:x,onSkipAllClick:L,target:r,mutationsListenerElement:m,theme:C,role:"status","aria-hidden":!q},g))};
@@ -0,0 +1 @@
1
+ "use strict";module.exports={step:"lds-step"};
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { TipProps } from "../Tip/Tip";
3
+ export interface Step {
4
+ id: string;
5
+ selector: string;
6
+ pointer?: string;
7
+ content: React.ReactNode;
8
+ placement?: TipProps["placement"];
9
+ theme?: TipProps["theme"];
10
+ popupWidth?: TipProps["width"];
11
+ popupOffset?: TipProps["offset"];
12
+ pointerOffset?: [number, number];
13
+ pointerStyles?: React.CSSProperties;
14
+ pointerClassName?: string;
15
+ mutationsListenerElementSelector?: string;
16
+ }
17
+ export interface StepsProps {
18
+ setNextStepNumber(id: string): number;
19
+ getActiveStep(id: string): number;
20
+ setSkipAll(): void;
21
+ onPointerClick?(tourId: string, step: Step): void;
22
+ onCloseTip?(tourId: string, step: Step): void;
23
+ onNextClick?(tourId: string, step: Step): void;
24
+ onSkipAllClick?(tourId: string, step: Step): void;
25
+ tour: {
26
+ id: string;
27
+ steps: Step[];
28
+ };
29
+ container?: HTMLElement;
30
+ }
31
+ declare const Steps: ({ setNextStepNumber, getActiveStep, setSkipAll, onPointerClick, onCloseTip, onNextClick, onSkipAllClick, tour, container, }: StepsProps) => React.ReactPortal | null;
32
+ export default Steps;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react"),t=require("react-dom"),i=require("rooks"),l=require("./Step.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),o=n(t),r={subtree:!0,childList:!0,attributes:!1,characterData:!1};module.exports=function(t){var n=t.setNextStepNumber,c=t.getActiveStep,a=t.setSkipAll,s=t.onPointerClick,d=t.onCloseTip,f=t.onNextClick,k=t.onSkipAllClick,C=t.tour,b=t.container,p=void 0===b?document.body:b,S=e.useRef(p),m=e.useState(null),v=m[0],q=m[1],x=C.steps[c(C.id)],y=document.querySelector((null==x?void 0:x.mutationsListenerElementSelector)||"body"),A=e.useCallback((function(){if(x){var e=p.querySelector(null==x?void 0:x.selector);q(null!=e?e:null)}}),[p,x]),N=e.useCallback((function(){s&&s(C.id,x)}),[s,x,C.id]),E=e.useCallback((function(){d&&d(C.id,x)}),[d,x,C.id]),g=e.useCallback((function(){f&&f(C.id,x)}),[f,x,C.id]),L=e.useCallback((function(){k&&k(C.id,x)}),[k,x,C.id]);return i.useMutationObserver(S,A,r),e.useEffect((function(){A()}),[A]),x&&v&&y?o.default.createPortal(u.default.createElement(l,{target:v,step:x,mutationsListenerElement:y,goNext:function(){return n(C.id)},setSkipAll:a,onPointerClick:N,onClose:E,onNextClick:g,onSkipAllClick:L}),p):null};
@@ -0,0 +1,52 @@
1
+ import type { Step, StepsProps } from "./Steps";
2
+ export interface Tour {
3
+ id: string;
4
+ steps: Array<Step>;
5
+ }
6
+ export interface TipsProps {
7
+ /**
8
+ * Increment active step number for a given tour id
9
+ * @param id Tour id
10
+ */
11
+ setNextStepNumber(id: string): number;
12
+ /**
13
+ * Get the active step number for a given tour id
14
+ * @param id Tour id
15
+ */
16
+ getActiveStep(id: string): number;
17
+ /**
18
+ * Set `skipAll` to true
19
+ */
20
+ setSkipAll(): void;
21
+ /**
22
+ * Skip all tips for all tours
23
+ */
24
+ skipAll?: boolean;
25
+ tours: Array<Tour>;
26
+ container?: HTMLElement;
27
+ /**
28
+ * Track click events on the pointer of a step
29
+ */
30
+ onPointerClick?: StepsProps["onPointerClick"];
31
+ /**
32
+ * Track close tip events of a step
33
+ *
34
+ * Tips are closed by clicking outside the tip, hitting Esc key or on blur
35
+ */
36
+ onCloseTip?: StepsProps["onCloseTip"];
37
+ /**
38
+ * Track click events on the Got it -button of a step
39
+ */
40
+ onNextClick?: StepsProps["onNextClick"];
41
+ /**
42
+ * Track click events on the Skip all tips -button of a step
43
+ */
44
+ onSkipAllClick?: StepsProps["onSkipAllClick"];
45
+ }
46
+ /**
47
+ * Provide a `Tour` array to place tips on the page.
48
+ * Keep track of current step using a store that exposes `skipAll` boolean
49
+ * as well as `setNextStepNumber`, `getActiveStep` and `setSkipAll` functions.
50
+ */
51
+ declare const Tips: ({ setNextStepNumber, getActiveStep, setSkipAll, onPointerClick, onCloseTip, onNextClick, onSkipAllClick, skipAll, tours, container, }: TipsProps) => JSX.Element | null;
52
+ export default Tips;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react"),t=require("./Steps.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=l(e);module.exports=function(e){var l=e.setNextStepNumber,i=e.getActiveStep,o=e.setSkipAll,r=e.onPointerClick,u=e.onCloseTip,c=e.onNextClick,a=e.onSkipAllClick,p=e.skipAll,s=void 0!==p&&p,k=e.tours,d=e.container,f=void 0===d?document.body:d;return!0===s?null:n.default.createElement(n.default.Fragment,null,k.map((function(e){return n.default.createElement(t,{key:e.id,setNextStepNumber:l,getActiveStep:i,setSkipAll:o,onPointerClick:r,onCloseTip:u,onNextClick:c,onSkipAllClick:a,tour:e,container:f})})))};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.__assign=function(){return exports.__assign=Object.assign||function(e){for(var t,r=1,o=arguments.length;r<o;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},exports.__assign.apply(this,arguments)},exports.__rest=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r};
@@ -0,0 +1,2 @@
1
+ export { default as Tips } from "./Tips/Tips";
2
+ export { default as Tip } from "./Tip/Tip";
@@ -0,0 +1 @@
1
+ .lds-tip-pointer--pointer{animation:lds-tip-pointer--pulse 2s infinite;border:2px solid hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.69);border-radius:9999px;box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l));height:var(--spacing-base-5);pointer-events:none;position:absolute;visibility:hidden;width:var(--spacing-base-5);z-index:1}.lds-tip-pointer--pointer:hover{background:hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.21);border:2px solid hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.79)}.lds-tip-pointer--pointer[data-popper-reference-hidden]{pointer-events:none;visibility:hidden}.lds-tip-pointer--pointer[data-show=true]{pointer-events:auto;visibility:visible}@keyframes lds-tip-pointer--pulse{0%{box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.7)}70%{box-shadow:0 0 0 10px hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/0)}to{box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/0)}}.lds-tip{--background-color:var(--color-background-tip-default);--color:var(--color-font-tip-default)}.lds-tip.lds-tip--important{--background-color:var(--color-background-tip-important);--color:var(--color-font-tip-important)}.lds-tip.lds-tip--white{--background-color:var(--color-background-tip-white);--color:var(--color-font-tip-white)}.lds-tip{--tw-shadow:var(--shadow-base-xl);--tw-shadow-colored:var(--shadow-base-xl);background-color:var(--background-color);border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--color);font-size:.75rem;line-height:1rem;padding:var(--spacing-base-md);z-index:14}.lds-tip.lds-tip--important,.lds-tip.lds-tip--important .lds-tip--caret{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lds-tip--caret,.lds-tip.lds-tip--important,.lds-tip.lds-tip--important .lds-tip--caret{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lds-tip--caret{--tw-shadow:var(--shadow-base-xl);--tw-shadow-colored:var(--shadow-base-xl);height:var(--spacing-base-sm);width:var(--spacing-base-sm)}.lds-tip[data-popper-placement*=bottom]>.lds-tip--caret{top:calc(var(--spacing-base-xs)*-1)}.lds-tip>.lds-tip--caret:after{--tw-rotate:45deg;background-color:var(--background-color);content:" ";display:block;height:var(--spacing-base-2);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:var(--spacing-base-2)}.lds-tip[data-popper-placement*=right] .lds-tip--caret{left:calc(var(--spacing-base-xs)*-1)}.lds-tip[data-popper-placement*=left] .lds-tip--caret{right:calc(var(--spacing-base-xs)*-1)}.lds-tip[data-popper-placement*=top] .lds-tip--caret{bottom:calc(var(--spacing-base-xs)*-1)}.lds-tip>h1,.lds-tip>h2,.lds-tip>h3,.lds-tip>h4,.lds-tip>h5,.lds-tip>h6{color:var(--color);font-size:var(--typography-heading-size-h2);font-weight:700;line-height:var(--typography-heading-line-height-h2);margin-bottom:var(--spacing-base-lg);margin-top:var(--spacing-base-xs)}.lds-tip>h1:before,.lds-tip>h2:before,.lds-tip>h3:before,.lds-tip>h4:before,.lds-tip>h5:before,.lds-tip>h6:before{margin-bottom:var(--spacing-h2-basekick-cap)}.lds-tip>h1:after,.lds-tip>h2:after,.lds-tip>h3:after,.lds-tip>h4:after,.lds-tip>h5:after,.lds-tip>h6:after{margin-top:var(--spacing-h2-basekick-baseline)}.lds-tip--buttons{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));margin-top:var(--spacing-base-xl)}@media (min-width:640px){.lds-tip--buttons{grid-template-columns:repeat(3,minmax(0,1fr))}}.lds-tip--ok-button,.lds-tip--skip-button{border-radius:.25rem;padding:var(--spacing-base-md)}.lds-tip--ok-button{background:var(--color-background-tip-button-default);color:var(--color-font-tip-button-default);font-weight:500}.lds-tip--important .lds-tip--ok-button{background:var(--color-background-tip-button-important);color:var(--color-font-tip-button-important)}.lds-tip--white .lds-tip--ok-button{background-color:var(--color-background-tip-button-white);color:var(--color-font-tip-button-white)}.lds-tip--skip-button{color:var(--color);grid-column:3}.lds-tip p{margin-bottom:var(--spacing-base-md)}.lds-step{pointer-events:none;visibility:hidden}.lds-step[data-show=true]{pointer-events:auto;visibility:visible}
@@ -0,0 +1 @@
1
+ export * from "./components";
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Tips/Tips.js"),r=require("./Tip/Tip.js");exports.Tips=e,exports.Tip=r;
@@ -0,0 +1,33 @@
1
+ import React, { HTMLAttributes } from "react";
2
+ import { Placement } from "@popperjs/core";
3
+ export interface TipProps extends HTMLAttributes<HTMLDivElement> {
4
+ onDoneClick(): void;
5
+ onSkipAllClick(): void;
6
+ /**
7
+ * Popper placement. Defaults to `auto`
8
+ */
9
+ placement?: Placement;
10
+ theme?: "normal" | "important" | "white";
11
+ /**
12
+ * The target element for the popup placement
13
+ */
14
+ target: HTMLElement;
15
+ offset?: [number, number];
16
+ /**
17
+ * Optional width of the popup. If not specified, the width will be 20rem
18
+ */
19
+ width?: string;
20
+ /**
21
+ * Which element to listen for mutations on. Defaults to document.body
22
+ */
23
+ mutationsListenerElement?: HTMLElement;
24
+ /**
25
+ * Optional ref to the popup.
26
+ */
27
+ popupRef?: React.MutableRefObject<HTMLDivElement | null>;
28
+ }
29
+ /**
30
+ * Tip component. Uses [React Popper](https://popper.js.org/react-popper/) for the popup positioning.
31
+ */
32
+ declare const Tip: ({ popupRef, className, onDoneClick, onSkipAllClick, target, mutationsListenerElement, theme, id, offset, width, placement, children, ...props }: TipProps) => JSX.Element;
33
+ export default Tip;
@@ -0,0 +1 @@
1
+ import{__rest as t,__assign as e}from"../_virtual/_tslib.js";import o,{useRef as r,useState as i,useCallback as a,useMemo as n}from"react";import l from"clsx";import{usePopper as s}from"react-popper";import{throttle as c}from"lodash";import{useMutationObserver as m}from"rooks";import p from"./Tip.module.css.js";var u={subtree:!0,childList:!0,attributes:!1,characterData:!1},d=function(d){var f,h=d.popupRef,k=d.className,v=d.onDoneClick,b=d.onSkipAllClick,w=d.target,E=d.mutationsListenerElement,N=void 0===E?document.body:E,C=d.theme,y=d.id,g=d.offset,D=void 0===g?[20,0]:g,L=d.width,S=d.placement,j=void 0===S?"auto":S,x=d.children,A=t(d,["popupRef","className","onDoneClick","onSkipAllClick","target","mutationsListenerElement","theme","id","offset","width","placement","children"]),B=r(null),R=r(N),_=i(),G=_[0],T=_[1],q=a((function(t){T(t),h&&(h.current=t)}),[h]),z=n((function(){return[{name:"offset",options:{offset:D}},{name:"arrow",options:{padding:6}}]}),[D]),F=s(w,G,{placement:j,modifiers:z}),H=F.styles,I=F.attributes,J=F.update,K=c((function(){var t;null===(t=null==J?void 0:J())||void 0===t||t.catch((function(t){console.error(t)}))}),250);return m(R,K,u),o.createElement("div",e({ref:q,id:y},A,{className:l(k,p.tip,(f={},f[p.important]="important"===C,f[p.white]="white"===C,f)),style:e(e({},H.popper),{width:L||"20rem"})},I.popper),x,o.createElement("div",{"data-popper-arrow":!0,ref:B,className:p.caret,style:H.arrow}),o.createElement("div",{className:p.buttons},o.createElement("button",{onClick:v,className:p.okButton,"aria-controls":y},"Got it!"),o.createElement("button",{onClick:b,className:p.skipButton,"aria-controls":y},"Skip all tips")))};export{d as default};
@@ -0,0 +1 @@
1
+ var t={tip:"lds-tip",important:"lds-tip--important",white:"lds-tip--white",caret:"lds-tip--caret",buttons:"lds-tip--buttons",okButton:"lds-tip--ok-button",skipButton:"lds-tip--skip-button"};export{t as default};
@@ -0,0 +1,16 @@
1
+ import { HTMLAttributes } from "react";
2
+ import type { Step } from "../Tips/Steps";
3
+ interface TipPointerProps extends Omit<HTMLAttributes<HTMLButtonElement>, "onClick" | "id" | "style" | "ref"> {
4
+ step: Step;
5
+ onClick: () => void;
6
+ target: HTMLElement;
7
+ hidden: boolean;
8
+ mutationsListenerElement: HTMLElement;
9
+ }
10
+ /**
11
+ * TipPointer component
12
+ *
13
+ * Used with `Tips` component to highlight a tip target.
14
+ */
15
+ export default function TipPointer({ step, onClick, target, hidden, mutationsListenerElement, ...props }: TipPointerProps): JSX.Element;
16
+ export {};
@@ -0,0 +1 @@
1
+ import{__rest as t,__assign as e}from"../_virtual/_tslib.js";import r,{useRef as o,useMemo as n,useState as i,useEffect as s}from"react";import a from"clsx";import{throttle as p}from"lodash";import{usePopper as l}from"react-popper";import{useMutationObserver as c}from"rooks";import m from"./TipPointer.module.css.js";var f={subtree:!0,childList:!0,attributes:!1,characterData:!1};function u(u){var d=u.step,h=u.onClick,v=u.target,b=u.hidden,k=u.mutationsListenerElement,C=t(u,["step","onClick","target","hidden","mutationsListenerElement"]),y=o(k),E=d.pointerOffset,L=d.placement,N=d.id,g=d.pointerStyles,j=o(null),x=n((function(){return E?[E[1],E[0]]:[0,0]}),[E]),_=i(!1),w=_[0],D=_[1],O=n((function(){return[{name:"offset",options:{offset:x}}]}),[x]),P=l(v,j.current,{placement:L,modifiers:O}),S=P.styles,T=P.attributes,q=P.update,z=p((function(){var t;null===(t=null==q?void 0:q())||void 0===t||t.catch((function(t){console.error(t)}))}),250);return s((function(){D(!0)}),[]),c(y,z,f),r.createElement("button",e({},C,{ref:j,"data-show":w&&!b,id:"pointer-for-".concat(N),onClick:h,className:a(C.className,m.pointer,d.pointerClassName),style:e(e({},S.popper),g)},T.popper))}export{u as default};
@@ -0,0 +1 @@
1
+ var p={pointer:"lds-tip-pointer--pointer",pulse:"lds-tip-pointer--pulse"};export{p as default};
@@ -0,0 +1,13 @@
1
+ import { Step } from "./Steps";
2
+ export interface StepProps {
3
+ target: HTMLElement;
4
+ mutationsListenerElement: HTMLElement;
5
+ goNext(): void;
6
+ setSkipAll(): void;
7
+ onPointerClick?(step: Step): void;
8
+ onClose?(step: Step): void;
9
+ onNextClick?(step: Step): void;
10
+ onSkipAllClick?(step: Step): void;
11
+ step: Step;
12
+ }
13
+ export default function StepComponent({ step, target, goNext, setSkipAll, onPointerClick, onClose, onNextClick, onSkipAllClick, mutationsListenerElement, }: StepProps): JSX.Element;
@@ -0,0 +1 @@
1
+ import t,{useState as e,useRef as n,useCallback as o,useEffect as i}from"react";import{useOutsideClick as r,useKey as a,useWindowEventListener as l}from"rooks";import p from"../TipPointer/TipPointer.js";import c from"../Tip/Tip.js";import s from"./Step.module.css.js";function m(m){var u=m.step,f=m.target,d=m.goNext,k=m.setSkipAll,h=m.onPointerClick,C=m.onClose,E=m.onNextClick,g=m.onSkipAllClick,S=m.mutationsListenerElement,x=u.theme,T=u.placement,j=u.popupWidth,w=u.popupOffset,A=u.content,L=e(!1),N=L[0],P=L[1],b=n(null),v=o((function(){P(!0),h&&h(u)}),[u,h,P]),D=o((function(){d(),P(!1),E&&E(u)}),[u,E,d]),F=o((function(){k(),P(!1),g&&g(u)}),[u,g,k]);return r(b,o((function(t){t.target.id!=="pointer-for-".concat(u.id)&&(P(!1),N&&C&&C(u))}),[C,u,N])),a("Escape",o((function(){P(!1),N&&C&&C(u)}),[C,u,N])),i((function(){P(!1)}),[u]),l("blur",o((function(){P(!1),N&&C&&C(u)}),[C,u,N])),t.createElement(t.Fragment,null,t.createElement(p,{onClick:v,step:u,target:f,hidden:N,mutationsListenerElement:S,"aria-expanded":!!N,"aria-controls":u.id,"aria-label":"Show tip"}),t.createElement(c,{id:u.id,popupRef:b,className:s.step,placement:T,width:j,offset:w,"data-show":!!N,onDoneClick:D,onSkipAllClick:F,target:f,mutationsListenerElement:S,theme:x,role:"status","aria-hidden":!N},A))}export{m as default};
@@ -0,0 +1 @@
1
+ var e={step:"lds-step"};export{e as default};
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { TipProps } from "../Tip/Tip";
3
+ export interface Step {
4
+ id: string;
5
+ selector: string;
6
+ pointer?: string;
7
+ content: React.ReactNode;
8
+ placement?: TipProps["placement"];
9
+ theme?: TipProps["theme"];
10
+ popupWidth?: TipProps["width"];
11
+ popupOffset?: TipProps["offset"];
12
+ pointerOffset?: [number, number];
13
+ pointerStyles?: React.CSSProperties;
14
+ pointerClassName?: string;
15
+ mutationsListenerElementSelector?: string;
16
+ }
17
+ export interface StepsProps {
18
+ setNextStepNumber(id: string): number;
19
+ getActiveStep(id: string): number;
20
+ setSkipAll(): void;
21
+ onPointerClick?(tourId: string, step: Step): void;
22
+ onCloseTip?(tourId: string, step: Step): void;
23
+ onNextClick?(tourId: string, step: Step): void;
24
+ onSkipAllClick?(tourId: string, step: Step): void;
25
+ tour: {
26
+ id: string;
27
+ steps: Step[];
28
+ };
29
+ container?: HTMLElement;
30
+ }
31
+ declare const Steps: ({ setNextStepNumber, getActiveStep, setSkipAll, onPointerClick, onCloseTip, onNextClick, onSkipAllClick, tour, container, }: StepsProps) => React.ReactPortal | null;
32
+ export default Steps;
@@ -0,0 +1 @@
1
+ import t,{useRef as e,useState as o,useCallback as i,useEffect as n}from"react";import r from"react-dom";import{useMutationObserver as l}from"rooks";import c from"./Step.js";var u={subtree:!0,childList:!0,attributes:!1,characterData:!1},d=function(d){var a=d.setNextStepNumber,s=d.getActiveStep,m=d.setSkipAll,p=d.onPointerClick,f=d.onCloseTip,k=d.onNextClick,S=d.onSkipAllClick,C=d.tour,v=d.container,b=void 0===v?document.body:v,x=e(b),A=o(null),N=A[0],y=A[1],g=C.steps[s(C.id)],E=document.querySelector((null==g?void 0:g.mutationsListenerElementSelector)||"body"),L=i((function(){if(g){var t=b.querySelector(null==g?void 0:g.selector);y(null!=t?t:null)}}),[b,g]),P=i((function(){p&&p(C.id,g)}),[p,g,C.id]),h=i((function(){f&&f(C.id,g)}),[f,g,C.id]),q=i((function(){k&&k(C.id,g)}),[k,g,C.id]),j=i((function(){S&&S(C.id,g)}),[S,g,C.id]);return l(x,L,u),n((function(){L()}),[L]),g&&N&&E?r.createPortal(t.createElement(c,{target:N,step:g,mutationsListenerElement:E,goNext:function(){return a(C.id)},setSkipAll:m,onPointerClick:P,onClose:h,onNextClick:q,onSkipAllClick:j}),b):null};export{d as default};
@@ -0,0 +1,52 @@
1
+ import type { Step, StepsProps } from "./Steps";
2
+ export interface Tour {
3
+ id: string;
4
+ steps: Array<Step>;
5
+ }
6
+ export interface TipsProps {
7
+ /**
8
+ * Increment active step number for a given tour id
9
+ * @param id Tour id
10
+ */
11
+ setNextStepNumber(id: string): number;
12
+ /**
13
+ * Get the active step number for a given tour id
14
+ * @param id Tour id
15
+ */
16
+ getActiveStep(id: string): number;
17
+ /**
18
+ * Set `skipAll` to true
19
+ */
20
+ setSkipAll(): void;
21
+ /**
22
+ * Skip all tips for all tours
23
+ */
24
+ skipAll?: boolean;
25
+ tours: Array<Tour>;
26
+ container?: HTMLElement;
27
+ /**
28
+ * Track click events on the pointer of a step
29
+ */
30
+ onPointerClick?: StepsProps["onPointerClick"];
31
+ /**
32
+ * Track close tip events of a step
33
+ *
34
+ * Tips are closed by clicking outside the tip, hitting Esc key or on blur
35
+ */
36
+ onCloseTip?: StepsProps["onCloseTip"];
37
+ /**
38
+ * Track click events on the Got it -button of a step
39
+ */
40
+ onNextClick?: StepsProps["onNextClick"];
41
+ /**
42
+ * Track click events on the Skip all tips -button of a step
43
+ */
44
+ onSkipAllClick?: StepsProps["onSkipAllClick"];
45
+ }
46
+ /**
47
+ * Provide a `Tour` array to place tips on the page.
48
+ * Keep track of current step using a store that exposes `skipAll` boolean
49
+ * as well as `setNextStepNumber`, `getActiveStep` and `setSkipAll` functions.
50
+ */
51
+ declare const Tips: ({ setNextStepNumber, getActiveStep, setSkipAll, onPointerClick, onCloseTip, onNextClick, onSkipAllClick, skipAll, tours, container, }: TipsProps) => JSX.Element | null;
52
+ export default Tips;
@@ -0,0 +1 @@
1
+ import e from"react";import t from"./Steps.js";var o=function(o){var i=o.setNextStepNumber,n=o.getActiveStep,l=o.setSkipAll,r=o.onPointerClick,c=o.onCloseTip,p=o.onNextClick,k=o.onSkipAllClick,u=o.skipAll,a=void 0!==u&&u,m=o.tours,s=o.container,S=void 0===s?document.body:s;return!0===a?null:e.createElement(e.Fragment,null,m.map((function(o){return e.createElement(t,{key:o.id,setNextStepNumber:i,getActiveStep:n,setSkipAll:l,onPointerClick:r,onCloseTip:c,onNextClick:p,onSkipAllClick:k,tour:o,container:S})})))};export{o as default};
@@ -0,0 +1 @@
1
+ var r=function(){return r=Object.assign||function(r){for(var t,e=1,n=arguments.length;e<n;e++)for(var o in t=arguments[e])Object.prototype.hasOwnProperty.call(t,o)&&(r[o]=t[o]);return r},r.apply(this,arguments)};function t(r,t){var e={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&t.indexOf(n)<0&&(e[n]=r[n]);if(null!=r&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(r);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(r,n[o])&&(e[n[o]]=r[n[o]])}return e}export{r as __assign,t as __rest};
@@ -0,0 +1,2 @@
1
+ export { default as Tips } from "./Tips/Tips";
2
+ export { default as Tip } from "./Tip/Tip";
@@ -0,0 +1 @@
1
+ .lds-tip-pointer--pointer{animation:lds-tip-pointer--pulse 2s infinite;border:2px solid hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.69);border-radius:9999px;box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l));height:var(--spacing-base-5);pointer-events:none;position:absolute;visibility:hidden;width:var(--spacing-base-5);z-index:1}.lds-tip-pointer--pointer:hover{background:hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.21);border:2px solid hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.79)}.lds-tip-pointer--pointer[data-popper-reference-hidden]{pointer-events:none;visibility:hidden}.lds-tip-pointer--pointer[data-show=true]{pointer-events:auto;visibility:visible}@keyframes lds-tip-pointer--pulse{0%{box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/.7)}70%{box-shadow:0 0 0 10px hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/0)}to{box-shadow:0 0 0 0 hsl(var(--hues-tip-pointer-h) var(--hues-tip-pointer-s) var(--hues-tip-pointer-l)/0)}}.lds-tip{--background-color:var(--color-background-tip-default);--color:var(--color-font-tip-default)}.lds-tip.lds-tip--important{--background-color:var(--color-background-tip-important);--color:var(--color-font-tip-important)}.lds-tip.lds-tip--white{--background-color:var(--color-background-tip-white);--color:var(--color-font-tip-white)}.lds-tip{--tw-shadow:var(--shadow-base-xl);--tw-shadow-colored:var(--shadow-base-xl);background-color:var(--background-color);border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--color);font-size:.75rem;line-height:1rem;padding:var(--spacing-base-md);z-index:14}.lds-tip.lds-tip--important,.lds-tip.lds-tip--important .lds-tip--caret{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.lds-tip--caret,.lds-tip.lds-tip--important,.lds-tip.lds-tip--important .lds-tip--caret{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.lds-tip--caret{--tw-shadow:var(--shadow-base-xl);--tw-shadow-colored:var(--shadow-base-xl);height:var(--spacing-base-sm);width:var(--spacing-base-sm)}.lds-tip[data-popper-placement*=bottom]>.lds-tip--caret{top:calc(var(--spacing-base-xs)*-1)}.lds-tip>.lds-tip--caret:after{--tw-rotate:45deg;background-color:var(--background-color);content:" ";display:block;height:var(--spacing-base-2);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:var(--spacing-base-2)}.lds-tip[data-popper-placement*=right] .lds-tip--caret{left:calc(var(--spacing-base-xs)*-1)}.lds-tip[data-popper-placement*=left] .lds-tip--caret{right:calc(var(--spacing-base-xs)*-1)}.lds-tip[data-popper-placement*=top] .lds-tip--caret{bottom:calc(var(--spacing-base-xs)*-1)}.lds-tip>h1,.lds-tip>h2,.lds-tip>h3,.lds-tip>h4,.lds-tip>h5,.lds-tip>h6{color:var(--color);font-size:var(--typography-heading-size-h2);font-weight:700;line-height:var(--typography-heading-line-height-h2);margin-bottom:var(--spacing-base-lg);margin-top:var(--spacing-base-xs)}.lds-tip>h1:before,.lds-tip>h2:before,.lds-tip>h3:before,.lds-tip>h4:before,.lds-tip>h5:before,.lds-tip>h6:before{margin-bottom:var(--spacing-h2-basekick-cap)}.lds-tip>h1:after,.lds-tip>h2:after,.lds-tip>h3:after,.lds-tip>h4:after,.lds-tip>h5:after,.lds-tip>h6:after{margin-top:var(--spacing-h2-basekick-baseline)}.lds-tip--buttons{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));margin-top:var(--spacing-base-xl)}@media (min-width:640px){.lds-tip--buttons{grid-template-columns:repeat(3,minmax(0,1fr))}}.lds-tip--ok-button,.lds-tip--skip-button{border-radius:.25rem;padding:var(--spacing-base-md)}.lds-tip--ok-button{background:var(--color-background-tip-button-default);color:var(--color-font-tip-button-default);font-weight:500}.lds-tip--important .lds-tip--ok-button{background:var(--color-background-tip-button-important);color:var(--color-font-tip-button-important)}.lds-tip--white .lds-tip--ok-button{background-color:var(--color-background-tip-button-white);color:var(--color-font-tip-button-white)}.lds-tip--skip-button{color:var(--color);grid-column:3}.lds-tip p{margin-bottom:var(--spacing-base-md)}.lds-step{pointer-events:none;visibility:hidden}.lds-step[data-show=true]{pointer-events:auto;visibility:visible}
@@ -0,0 +1 @@
1
+ export * from "./components";
@@ -0,0 +1 @@
1
+ export{default as Tips}from"./Tips/Tips.js";export{default as Tip}from"./Tip/Tip.js";
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@k8slens/lds-tips",
3
+ "version": "0.1.3",
4
+ "description": "Lens Design System – React Tips component",
5
+ "author": "Mirantis Inc",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "registry": "https://registry.npmjs.org/"
11
+ },
12
+ "sideEffects": false,
13
+ "main": "./lib/cjs/index.js",
14
+ "module": "./lib/es/index.js",
15
+ "types": "./lib/es/index.d.ts",
16
+ "type": "module",
17
+ "files": [
18
+ "lib/"
19
+ ],
20
+ "scripts": {
21
+ "start": "npm run rollup-watch",
22
+ "build": "npm run clean && npm run rollup",
23
+ "rollup-watch": "rollup -c --watch --waitForBundleInput",
24
+ "rollup": "rollup -c",
25
+ "clean": "rimraf lib",
26
+ "test": "jest",
27
+ "lint": "eslint .",
28
+ "format": "eslint --fix ."
29
+ },
30
+ "dependencies": {
31
+ "@k8slens/lds": "^0.11.2"
32
+ },
33
+ "devDependencies": {
34
+ "@k8slens/lds-icons": "^0.9.2",
35
+ "@k8slens/lds-tokens": "^0.12.2",
36
+ "@rollup/plugin-node-resolve": "15.0.1",
37
+ "@storybook/react": "6.5.13",
38
+ "@testing-library/react": "13.4.0"
39
+ },
40
+ "peerDependencies": {
41
+ "@popperjs/core": "^2.11.6",
42
+ "@types/react": "18.0.24",
43
+ "@types/react-dom": "18.0.8",
44
+ "clsx": "^1.2.1",
45
+ "lodash": "^4.17.21",
46
+ "react": "^18.2.0",
47
+ "react-dom": "^18.2.0",
48
+ "react-popper": "^2.3.0",
49
+ "rooks": "^7.4.3"
50
+ },
51
+ "jest": {
52
+ "testEnvironment": "jsdom",
53
+ "transform": {
54
+ "^.+\\.(ts|tsx|js|jsx)$": "ts-jest"
55
+ },
56
+ "moduleNameMapper": {
57
+ "\\.(css|less)$": "<rootDir>/../../__mocks__/CSSStub.js",
58
+ "\\.svg": "<rootDir>/../../__mocks__/SVGStub.js"
59
+ }
60
+ },
61
+ "gitHead": "586e729ead7372b6fd5586adb2734db1c7fe61b1"
62
+ }