@stack-spot/citric-react 0.11.1 → 0.12.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/dist/citric.css CHANGED
@@ -1782,10 +1782,6 @@ nav[data-citric="menu"].rounded-items, [data-citric="menu"].rounded-items nav {
1782
1782
  border-radius: var(--radius-xs);
1783
1783
  }
1784
1784
 
1785
- &.text {
1786
- background-color: transparent;
1787
- }
1788
-
1789
1785
  /* Colors */
1790
1786
 
1791
1787
  &[data-color-scheme] {
@@ -0,0 +1,49 @@
1
+ import { HTMLTag } from '../types.js';
2
+ type ImageBoxTag = 'a' | 'button' | 'span' | 'div';
3
+ export interface BaseImageBoxProps<T extends ImageBoxTag> {
4
+ /**
5
+ * The HTML element to render.
6
+ *
7
+ * @default 'div'
8
+ */
9
+ tag?: T;
10
+ /**
11
+ * The box appearance.
12
+ *
13
+ * @default 'circle'
14
+ */
15
+ appearance?: 'circle' | 'square';
16
+ /**
17
+ * Size of the box.
18
+ *
19
+ * @default 'sm'
20
+ */
21
+ size?: 'xs' | 'sm' | 'md' | 'lg';
22
+ /**
23
+ * Animated text to show on when the button/link is clicked. This is only valid for buttons and anchors.
24
+ */
25
+ feedback?: string;
26
+ /**
27
+ * Only valid if `tag` is "button" or "a".
28
+ *
29
+ * Whether or not a click in this button/link should generate analytics data.
30
+ *
31
+ * This only takes effect if there's a CitricController in React's context. The value of `analytics` is passed to the function
32
+ * `onClickButton/onClickLink` of the controller.
33
+ *
34
+ * @default false
35
+ */
36
+ analytics?: boolean;
37
+ }
38
+ export type ImageBoxProps<T extends ImageBoxTag> = HTMLTag[T] & BaseImageBoxProps<T>;
39
+ export declare function ImageBox<T extends ImageBoxTag = 'div'>({ tag, appearance, size, className, analytics, onClick, feedback, ...props }: ImageBoxProps<T>): import("react/jsx-runtime").JSX.Element;
40
+ /**
41
+ * Shortcut to `<ImageBox tag="button" />`
42
+ */
43
+ export declare function ImageButton(props: Omit<ImageBoxProps<'button'>, 'tag'>): import("react/jsx-runtime").JSX.Element;
44
+ /**
45
+ * Shortcut to `<ImageBox tag="a" />`
46
+ */
47
+ export declare function ImageLink(props: Omit<ImageBoxProps<'a'>, 'tag'>): import("react/jsx-runtime").JSX.Element;
48
+ export {};
49
+ //# sourceMappingURL=ImageBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageBox.d.ts","sourceRoot":"","sources":["../../src/components/ImageBox.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGlC,KAAK,WAAW,GAAG,GAAG,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;AAElD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,WAAW;IACtD;;;;OAIG;IACH,GAAG,CAAC,EAAE,CAAC,CAAC;IACR;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;AAEpF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,WAAW,GAAG,KAAK,EACpD,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,2CAkB/F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,2CAEtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,2CAE/D"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { listToClass } from '@stack-spot/portal-theme';
3
+ import { useCallback } from 'react';
4
+ import { useCitricController } from '../context/hooks.js';
5
+ import { CitricComponent } from './CitricComponent.js';
6
+ export function ImageBox({ tag, appearance, size, className, analytics, onClick, feedback, ...props }) {
7
+ const citric = useCitricController();
8
+ const handleClick = useCallback((e) => {
9
+ onClick?.(e);
10
+ if (tag === 'button')
11
+ citric?.onClickButton?.(e, analytics ?? false);
12
+ else if (tag === 'a')
13
+ citric?.onClickLink?.(e, analytics ?? false);
14
+ }, [tag]);
15
+ return _jsx(CitricComponent, { tag: (tag || 'i'), component: "icon-box", className: listToClass([appearance, size, className]), "data-feedback": feedback || undefined, onClick: ['button', 'a'].includes(tag ?? '') ? handleClick : onClick, ...props });
16
+ }
17
+ /**
18
+ * Shortcut to `<ImageBox tag="button" />`
19
+ */
20
+ export function ImageButton(props) {
21
+ return ImageBox({ ...props, tag: 'button', type: props.type || 'button' });
22
+ }
23
+ /**
24
+ * Shortcut to `<ImageBox tag="a" />`
25
+ */
26
+ export function ImageLink(props) {
27
+ return ImageBox({ ...props, tag: 'a' });
28
+ }
29
+ //# sourceMappingURL=ImageBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageBox.js","sourceRoot":"","sources":["../../src/components/ImageBox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA0CnD,MAAM,UAAU,QAAQ,CACtB,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAoB;IAE9F,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAA;IAEpC,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAwB,EAAE,EAAE;QAC3D,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;QACZ,IAAI,GAAG,KAAK,QAAQ;YAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC,CAAA;aAC/D,IAAI,GAAG,KAAK,GAAG;YAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,IAAI,KAAK,CAAC,CAAA;IACpE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAET,OAAO,KAAC,eAAe,IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAQ,EACxB,SAAS,EAAC,UAAU,EACpB,SAAS,EAAE,WAAW,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,mBACtC,QAAQ,IAAI,SAAS,EACpC,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,KAChE,KAAK,GACT,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAA2C;IACrE,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAA;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAsC;IAC9D,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;AACzC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,7 @@ export * from './components/FieldGroup.js';
20
20
  export * from './components/Form.js';
21
21
  export * from './components/FormGroup.js';
22
22
  export * from './components/IconBox.js';
23
+ export * from './components/ImageBox.js';
23
24
  export * from './components/Input.js';
24
25
  export * from './components/layout.js';
25
26
  export * from './components/Link.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,cAAc,yBAAyB,CAAA"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ export * from './components/FieldGroup.js';
20
20
  export * from './components/Form.js';
21
21
  export * from './components/FormGroup.js';
22
22
  export * from './components/IconBox.js';
23
+ export * from './components/ImageBox.js';
23
24
  export * from './components/Input.js';
24
25
  export * from './components/layout.js';
25
26
  export * from './components/Link.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AAExC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AAExC,cAAc,yBAAyB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/citric-react",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "author": "StackSpot",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -0,0 +1,80 @@
1
+ import { listToClass } from '@stack-spot/portal-theme'
2
+ import { useCallback } from 'react'
3
+ import { useCitricController } from '../context/hooks'
4
+ import { HTMLTag } from '../types'
5
+ import { CitricComponent } from './CitricComponent'
6
+
7
+ type ImageBoxTag = 'a' | 'button' | 'span' | 'div'
8
+
9
+ export interface BaseImageBoxProps<T extends ImageBoxTag> {
10
+ /**
11
+ * The HTML element to render.
12
+ *
13
+ * @default 'div'
14
+ */
15
+ tag?: T,
16
+ /**
17
+ * The box appearance.
18
+ *
19
+ * @default 'circle'
20
+ */
21
+ appearance?: 'circle' | 'square',
22
+ /**
23
+ * Size of the box.
24
+ *
25
+ * @default 'sm'
26
+ */
27
+ size?: 'xs' | 'sm' | 'md' | 'lg',
28
+ /**
29
+ * Animated text to show on when the button/link is clicked. This is only valid for buttons and anchors.
30
+ */
31
+ feedback?: string,
32
+ /**
33
+ * Only valid if `tag` is "button" or "a".
34
+ *
35
+ * Whether or not a click in this button/link should generate analytics data.
36
+ *
37
+ * This only takes effect if there's a CitricController in React's context. The value of `analytics` is passed to the function
38
+ * `onClickButton/onClickLink` of the controller.
39
+ *
40
+ * @default false
41
+ */
42
+ analytics?: boolean,
43
+ }
44
+
45
+ export type ImageBoxProps<T extends ImageBoxTag> = HTMLTag[T] & BaseImageBoxProps<T>
46
+
47
+ export function ImageBox<T extends ImageBoxTag = 'div'>(
48
+ { tag, appearance, size, className, analytics, onClick, feedback, ...props }: ImageBoxProps<T>,
49
+ ) {
50
+ const citric = useCitricController()
51
+
52
+ const handleClick = useCallback((e: React.MouseEvent<any>) => {
53
+ onClick?.(e)
54
+ if (tag === 'button') citric?.onClickButton?.(e, analytics ?? false)
55
+ else if (tag === 'a') citric?.onClickLink?.(e, analytics ?? false)
56
+ }, [tag])
57
+
58
+ return <CitricComponent
59
+ tag={(tag || 'i') as any}
60
+ component="icon-box"
61
+ className={listToClass([appearance, size, className])}
62
+ data-feedback={feedback || undefined}
63
+ onClick={['button', 'a'].includes(tag ?? '') ? handleClick : onClick}
64
+ {...props}
65
+ />
66
+ }
67
+
68
+ /**
69
+ * Shortcut to `<ImageBox tag="button" />`
70
+ */
71
+ export function ImageButton(props: Omit<ImageBoxProps<'button'>, 'tag'>) {
72
+ return ImageBox({ ...props, tag: 'button', type: props.type || 'button' })
73
+ }
74
+
75
+ /**
76
+ * Shortcut to `<ImageBox tag="a" />`
77
+ */
78
+ export function ImageLink(props: Omit<ImageBoxProps<'a'>, 'tag'>) {
79
+ return ImageBox({ ...props, tag: 'a' })
80
+ }
package/src/index.ts CHANGED
@@ -20,6 +20,7 @@ export * from './components/FieldGroup'
20
20
  export * from './components/Form'
21
21
  export * from './components/FormGroup'
22
22
  export * from './components/IconBox'
23
+ export * from './components/ImageBox'
23
24
  export * from './components/Input'
24
25
  export * from './components/layout'
25
26
  export * from './components/Link'