@searchspring/snap-preact-components 0.55.0 → 0.56.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.
Files changed (63) hide show
  1. package/dist/cjs/components/Molecules/Grid/Grid.d.ts +20 -0
  2. package/dist/cjs/components/Molecules/Grid/Grid.d.ts.map +1 -0
  3. package/dist/cjs/components/Molecules/Grid/Grid.js +210 -0
  4. package/dist/cjs/components/Molecules/Grid/index.d.ts +2 -0
  5. package/dist/cjs/components/Molecules/Grid/index.d.ts.map +1 -0
  6. package/dist/cjs/components/Molecules/Grid/index.js +17 -0
  7. package/dist/cjs/components/Molecules/List/List.d.ts +18 -0
  8. package/dist/cjs/components/Molecules/List/List.d.ts.map +1 -0
  9. package/dist/cjs/components/Molecules/List/List.js +158 -0
  10. package/dist/cjs/components/Molecules/List/index.d.ts +2 -0
  11. package/dist/cjs/components/Molecules/List/index.d.ts.map +1 -0
  12. package/dist/cjs/components/Molecules/List/index.js +17 -0
  13. package/dist/cjs/components/Molecules/Swatches/Swatches.d.ts +19 -0
  14. package/dist/cjs/components/Molecules/Swatches/Swatches.d.ts.map +1 -0
  15. package/dist/cjs/components/Molecules/Swatches/Swatches.js +168 -0
  16. package/dist/cjs/components/Molecules/Swatches/index.d.ts +2 -0
  17. package/dist/cjs/components/Molecules/Swatches/index.d.ts.map +1 -0
  18. package/dist/cjs/components/Molecules/Swatches/index.js +17 -0
  19. package/dist/cjs/components/Molecules/VariantSelection/VariantSelection.d.ts +9 -0
  20. package/dist/cjs/components/Molecules/VariantSelection/VariantSelection.d.ts.map +1 -0
  21. package/dist/cjs/components/Molecules/VariantSelection/VariantSelection.js +146 -0
  22. package/dist/cjs/components/Molecules/VariantSelection/index.d.ts +2 -0
  23. package/dist/cjs/components/Molecules/VariantSelection/index.d.ts.map +1 -0
  24. package/dist/cjs/components/Molecules/VariantSelection/index.js +17 -0
  25. package/dist/cjs/index.d.ts +5 -1
  26. package/dist/cjs/index.d.ts.map +1 -1
  27. package/dist/cjs/index.js +5 -1
  28. package/dist/cjs/types.d.ts +15 -0
  29. package/dist/cjs/types.d.ts.map +1 -1
  30. package/dist/cjs/utilities/snapify.d.ts.map +1 -1
  31. package/dist/cjs/utilities/snapify.js +3 -0
  32. package/dist/esm/components/Molecules/Grid/Grid.d.ts +20 -0
  33. package/dist/esm/components/Molecules/Grid/Grid.d.ts.map +1 -0
  34. package/dist/esm/components/Molecules/Grid/Grid.js +189 -0
  35. package/dist/esm/components/Molecules/Grid/index.d.ts +2 -0
  36. package/dist/esm/components/Molecules/Grid/index.d.ts.map +1 -0
  37. package/dist/esm/components/Molecules/Grid/index.js +1 -0
  38. package/dist/esm/components/Molecules/List/List.d.ts +18 -0
  39. package/dist/esm/components/Molecules/List/List.d.ts.map +1 -0
  40. package/dist/esm/components/Molecules/List/List.js +140 -0
  41. package/dist/esm/components/Molecules/List/index.d.ts +2 -0
  42. package/dist/esm/components/Molecules/List/index.d.ts.map +1 -0
  43. package/dist/esm/components/Molecules/List/index.js +1 -0
  44. package/dist/esm/components/Molecules/Swatches/Swatches.d.ts +19 -0
  45. package/dist/esm/components/Molecules/Swatches/Swatches.d.ts.map +1 -0
  46. package/dist/esm/components/Molecules/Swatches/Swatches.js +179 -0
  47. package/dist/esm/components/Molecules/Swatches/index.d.ts +2 -0
  48. package/dist/esm/components/Molecules/Swatches/index.d.ts.map +1 -0
  49. package/dist/esm/components/Molecules/Swatches/index.js +1 -0
  50. package/dist/esm/components/Molecules/VariantSelection/VariantSelection.d.ts +9 -0
  51. package/dist/esm/components/Molecules/VariantSelection/VariantSelection.d.ts.map +1 -0
  52. package/dist/esm/components/Molecules/VariantSelection/VariantSelection.js +167 -0
  53. package/dist/esm/components/Molecules/VariantSelection/index.d.ts +2 -0
  54. package/dist/esm/components/Molecules/VariantSelection/index.d.ts.map +1 -0
  55. package/dist/esm/components/Molecules/VariantSelection/index.js +1 -0
  56. package/dist/esm/index.d.ts +5 -1
  57. package/dist/esm/index.d.ts.map +1 -1
  58. package/dist/esm/index.js +5 -1
  59. package/dist/esm/types.d.ts +15 -0
  60. package/dist/esm/types.d.ts.map +1 -1
  61. package/dist/esm/utilities/snapify.d.ts.map +1 -1
  62. package/dist/esm/utilities/snapify.js +3 -0
  63. package/package.json +12 -11
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps, ListOption, SwatchOption } from '../../../types';
3
+ export declare function Grid(properties: GridProps): JSX.Element;
4
+ export interface GridProps extends ComponentProps {
5
+ options: SwatchOption[];
6
+ hideLabels?: boolean;
7
+ multiSelect?: boolean;
8
+ onSelect?: (e: React.MouseEvent<HTMLElement>, option: ListOption, selected: ListOption[]) => void;
9
+ titleText?: string;
10
+ hideShowLess?: boolean;
11
+ selected?: ListOption | ListOption[];
12
+ columns?: number;
13
+ rows?: number;
14
+ gapSize?: string;
15
+ disableOverflowAction?: boolean;
16
+ overflowButton?: JSX.Element;
17
+ overflowButtonInGrid?: boolean;
18
+ onOverflowButtonClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, status: boolean, remainder: number) => void;
19
+ }
20
+ //# sourceMappingURL=Grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/Grid/Grid.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAc,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAyGtF,wBAAgB,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAuKvD;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAChD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACnH"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Grid = void 0;
27
+ /** @jsx jsx */
28
+ var preact_1 = require("preact");
29
+ var react_1 = require("@emotion/react");
30
+ var classnames_1 = __importDefault(require("classnames"));
31
+ var providers_1 = require("../../../providers");
32
+ var react_2 = require("react");
33
+ var hooks_1 = require("../../../hooks");
34
+ var Image_1 = require("../../Atoms/Image");
35
+ var utilities_1 = require("../../../utilities");
36
+ var snap_toolbox_1 = require("@searchspring/snap-toolbox");
37
+ var CSS = {
38
+ Grid: function (_a) {
39
+ var _b;
40
+ var _c, _d, _e;
41
+ var theme = _a.theme, columns = _a.columns, gapSize = _a.gapSize, disableOverflowAction = _a.disableOverflowAction;
42
+ return (0, react_1.css)({
43
+ '.ss__grid__options': {
44
+ display: 'flex',
45
+ flexFlow: 'row wrap',
46
+ gridTemplateColumns: "repeat(".concat(columns, ", 1fr)"),
47
+ gap: gapSize,
48
+ gridAutoRows: "1fr",
49
+ '& .ss__grid__option': (_b = {
50
+ display: 'flex',
51
+ flexDirection: 'column',
52
+ boxSizing: 'content-box',
53
+ backgroundRepeat: 'no-repeat',
54
+ backgroundSize: "calc(100% / ".concat(columns, " - ").concat(2 * Math.round((columns + 2) / 2), "px)"),
55
+ backgroundPosition: 'center !important',
56
+ justifyContent: 'center',
57
+ alignItems: 'center',
58
+ flex: '0 1 auto',
59
+ border: "1px solid ".concat(((_c = theme === null || theme === void 0 ? void 0 : theme.colors) === null || _c === void 0 ? void 0 : _c.primary) || '#333'),
60
+ textAlign: 'center',
61
+ wordBreak: 'break-all',
62
+ padding: '1em 0',
63
+ width: "calc(100% / ".concat(columns, " - ").concat(2 * Math.round((columns + 2) / 2), "px)"),
64
+ margin: "0 ".concat(gapSize, " ").concat(gapSize, " 0"),
65
+ '.ss__grid__option__label': {
66
+ cursor: 'pointer',
67
+ }
68
+ },
69
+ _b[":nth-of-type(".concat(columns, "n)")] = {
70
+ marginRight: '0',
71
+ },
72
+ _b['&.ss__grid__option--selected'] = {
73
+ border: "2px solid ".concat(((_d = theme === null || theme === void 0 ? void 0 : theme.colors) === null || _d === void 0 ? void 0 : _d.primary) || '#333'),
74
+ },
75
+ _b['&.ss__grid__option--disabled'] = {
76
+ position: 'relative',
77
+ opacity: '.5',
78
+ cursor: 'none',
79
+ pointerEvents: 'none',
80
+ },
81
+ _b['&.ss__grid__option--unavailable'] = {
82
+ position: 'relative',
83
+ opacity: '.5',
84
+ },
85
+ _b['&.ss__grid__option--disabled:before, &.ss__grid__option--unavailable:before'] = {
86
+ content: '""',
87
+ display: 'block',
88
+ position: 'absolute',
89
+ top: '50%',
90
+ width: '90%',
91
+ height: '1px',
92
+ borderTop: '3px solid #eee',
93
+ outline: '1px solid #ffff',
94
+ transform: 'rotate(-45deg)',
95
+ },
96
+ _b['&:hover:not(.ss__grid__option--selected)'] = {
97
+ cursor: 'pointer',
98
+ background: ((_e = theme === null || theme === void 0 ? void 0 : theme.colors) === null || _e === void 0 ? void 0 : _e.hover) || '#f8f8f8',
99
+ },
100
+ _b),
101
+ '@supports (display: grid)': {
102
+ display: 'grid',
103
+ '& .ss__grid__option': {
104
+ padding: '0',
105
+ margin: '0',
106
+ width: 'initial',
107
+ },
108
+ '&::before': {
109
+ content: '""',
110
+ width: 0,
111
+ paddingBottom: '100%',
112
+ gridRow: '1 / 1',
113
+ gridColumn: '1 / 1',
114
+ },
115
+ '&> *:first-of-type': {
116
+ gridRow: '1 / 1',
117
+ gridColumn: '1 / 1',
118
+ },
119
+ },
120
+ },
121
+ '.ss__grid__show-more-wrapper': {
122
+ '&:hover': {
123
+ cursor: disableOverflowAction ? 'initial !important' : 'pointer !important',
124
+ },
125
+ },
126
+ });
127
+ },
128
+ };
129
+ function Grid(properties) {
130
+ var _a, _b, _c, _d;
131
+ var globalTheme = (0, providers_1.useTheme)();
132
+ var theme = __assign(__assign({}, globalTheme), properties.theme);
133
+ var props = __assign(__assign(__assign({
134
+ // default props
135
+ multiSelect: false, columns: 4, gapSize: '8px' }, (_a = globalTheme === null || globalTheme === void 0 ? void 0 : globalTheme.components) === null || _a === void 0 ? void 0 : _a.grid), properties), (_c = (_b = properties.theme) === null || _b === void 0 ? void 0 : _b.components) === null || _c === void 0 ? void 0 : _c.grid);
136
+ var titleText = props.titleText, onSelect = props.onSelect, hideLabels = props.hideLabels, disableOverflowAction = props.disableOverflowAction, multiSelect = props.multiSelect, overflowButton = props.overflowButton, columns = props.columns, rows = props.rows, hideShowLess = props.hideShowLess, gapSize = props.gapSize, overflowButtonInGrid = props.overflowButtonInGrid, disabled = props.disabled, options = props.options, disableStyles = props.disableStyles, onOverflowButtonClick = props.onOverflowButtonClick, className = props.className, style = props.style;
137
+ var subProps = {
138
+ image: __assign(__assign(__assign({
139
+ // default props
140
+ className: 'ss__swatches__Image' }, (_d = globalTheme === null || globalTheme === void 0 ? void 0 : globalTheme.components) === null || _d === void 0 ? void 0 : _d.image), (0, utilities_1.defined)({
141
+ disableStyles: disableStyles,
142
+ })), {
143
+ // component theme overrides
144
+ theme: props === null || props === void 0 ? void 0 : props.theme }),
145
+ };
146
+ var selected = props.selected;
147
+ var styling = {};
148
+ if (!disableStyles) {
149
+ styling.css = [CSS.Grid({ theme: theme, columns: columns, gapSize: gapSize, disableOverflowAction: disableOverflowAction }), style];
150
+ }
151
+ else if (style) {
152
+ styling.css = [style];
153
+ }
154
+ if (selected && !Array.isArray(selected)) {
155
+ selected = [selected];
156
+ }
157
+ // selection state
158
+ var _e = (0, react_2.useState)(selected || []), selection = _e[0], setSelection = _e[1];
159
+ var makeSelection = function (e, option) {
160
+ if (multiSelect) {
161
+ var newArray = void 0;
162
+ if (selection.find(function (select) { return select.value === option.value; })) {
163
+ newArray = __spreadArray([], selection, true);
164
+ newArray.splice(newArray.findIndex(function (select) { return select.value === option.value; }), 1);
165
+ }
166
+ else {
167
+ newArray = __spreadArray(__spreadArray([], selection, true), [option], false);
168
+ }
169
+ if (onSelect) {
170
+ onSelect(e, option, newArray);
171
+ }
172
+ setSelection(newArray);
173
+ }
174
+ else {
175
+ if (onSelect) {
176
+ onSelect(e, option, [option]);
177
+ }
178
+ setSelection([option]);
179
+ }
180
+ };
181
+ var limit = rows && columns ? columns * rows : options.length;
182
+ var remainder = Math.max(0, options.length - (limit - (overflowButtonInGrid ? 1 : 0)));
183
+ var _f = (0, react_2.useState)(remainder), limited = _f[0], setLimited = _f[1];
184
+ var OverflowButtonElem = function () {
185
+ var showButton = hideShowLess ? (!limited ? false : true) : true;
186
+ return showButton && remainder > 0 && options.length !== limit ? ((0, react_1.jsx)("div", { className: "ss__grid__show-more-wrapper ".concat(overflowButtonInGrid ? 'ss__grid__option' : ''), onClick: function (e) {
187
+ !disableOverflowAction && setLimited(!limited);
188
+ onOverflowButtonClick && onOverflowButtonClick(e, Boolean(limited), remainder);
189
+ } }, overflowButton ? ((0, utilities_1.cloneWithProps)(overflowButton, { limited: limited, remainder: remainder })) : limited ? ((0, react_1.jsx)("span", { className: 'ss__grid__show-more' }, "+ ".concat(remainder))) : remainder ? ((0, react_1.jsx)("span", { className: 'ss__grid__show-less' }, "Less")) : ((0, react_1.jsx)(preact_1.Fragment, null)))) : ((0, react_1.jsx)(preact_1.Fragment, null));
190
+ };
191
+ return typeof options == 'object' && (options === null || options === void 0 ? void 0 : options.length) ? ((0, react_1.jsx)(providers_1.CacheProvider, null,
192
+ (0, react_1.jsx)("div", __assign({}, styling, { className: (0, classnames_1.default)('ss__grid', disabled ? 'ss__grid--disabled' : '', className) }),
193
+ titleText && (0, react_1.jsx)("h5", { className: "ss__grid__title" }, titleText),
194
+ (0, react_1.jsx)("div", { className: "ss__grid__options" },
195
+ options.map(function (option, idx) {
196
+ var selected = selection.some(function (select) { return select.value == option.value; });
197
+ if (!limited || options.length == limit || idx < limit - (overflowButtonInGrid ? 1 : 0)) {
198
+ return ((0, react_1.jsx)("div", { className: (0, classnames_1.default)("ss__grid__option ss__grid__option--".concat(snap_toolbox_1.filters.handleize(option.value.toString())), {
199
+ 'ss__grid__option--selected': selected,
200
+ 'ss__grid__option--disabled': option === null || option === void 0 ? void 0 : option.disabled,
201
+ 'ss__grid__option--unavailable': (option === null || option === void 0 ? void 0 : option.available) === false,
202
+ }), style: { background: option.background ? option.background : option.backgroundImageUrl ? undefined : option.value }, onClick: function (e) { return !disabled && !(option === null || option === void 0 ? void 0 : option.disabled) && makeSelection(e, option); }, ref: function (e) { return (0, hooks_1.useA11y)(e); }, title: option.label, role: "option", "aria-selected": selected },
203
+ !option.background && option.backgroundImageUrl ? ((0, react_1.jsx)(Image_1.Image, __assign({}, subProps.image, { src: option.backgroundImageUrl, alt: option.label || option.value.toString() }))) : ((0, react_1.jsx)(preact_1.Fragment, null)),
204
+ !hideLabels ? (0, react_1.jsx)("label", { className: "ss__grid__option__label" }, option.label || option.value) : (0, react_1.jsx)(preact_1.Fragment, null)));
205
+ }
206
+ }),
207
+ overflowButtonInGrid ? (0, react_1.jsx)(OverflowButtonElem, null) : (0, react_1.jsx)(preact_1.Fragment, null)),
208
+ !overflowButtonInGrid ? (0, react_1.jsx)(OverflowButtonElem, null) : (0, react_1.jsx)(preact_1.Fragment, null)))) : ((0, react_1.jsx)(preact_1.Fragment, null));
209
+ }
210
+ exports.Grid = Grid;
@@ -0,0 +1,2 @@
1
+ export * from './Grid';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/Grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Grid"), exports);
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps, ListOption } from '../../../types';
3
+ export declare function List(properties: ListProps): JSX.Element;
4
+ export interface ListProps extends ComponentProps {
5
+ options: ListOption[];
6
+ multiSelect?: boolean;
7
+ hideOptionCheckboxes?: boolean;
8
+ hideOptionLabels?: boolean;
9
+ hideOptionIcons?: boolean;
10
+ onSelect?: (e: React.MouseEvent<HTMLElement>, option: ListOption, selected: ListOption[]) => void;
11
+ titleText?: string;
12
+ disabled?: boolean;
13
+ horizontal?: boolean;
14
+ native?: boolean;
15
+ selected?: ListOption | ListOption[];
16
+ requireSelection?: boolean;
17
+ }
18
+ //# sourceMappingURL=List.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/List/List.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAc,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAyDxE,wBAAgB,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CA+IvD;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAChD,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.List = void 0;
27
+ /** @jsx jsx */
28
+ var preact_1 = require("preact");
29
+ var react_1 = require("@emotion/react");
30
+ var classnames_1 = __importDefault(require("classnames"));
31
+ var providers_1 = require("../../../providers");
32
+ var utilities_1 = require("../../../utilities");
33
+ var react_2 = require("react");
34
+ var Checkbox_1 = require("../Checkbox");
35
+ var hooks_1 = require("../../../hooks");
36
+ var Icon_1 = require("../../Atoms/Icon");
37
+ var snap_toolbox_1 = require("@searchspring/snap-toolbox");
38
+ var CSS = {
39
+ List: function (_a) {
40
+ var horizontal = _a.horizontal;
41
+ return (0, react_1.css)({
42
+ display: 'flex',
43
+ flexDirection: horizontal ? 'row' : 'column',
44
+ alignItems: horizontal ? 'center' : undefined,
45
+ justifyItems: 'flex-start',
46
+ gap: '5px',
47
+ '& .ss__list__options': {
48
+ border: 'none',
49
+ listStyle: 'none',
50
+ padding: '0px',
51
+ margin: '0px',
52
+ display: 'flex',
53
+ flexDirection: horizontal ? 'row' : 'column',
54
+ alignItems: horizontal ? 'center' : undefined,
55
+ justifyItems: 'flex-start',
56
+ gap: '5px',
57
+ },
58
+ '.ss__list__option': {
59
+ cursor: 'pointer',
60
+ display: 'flex',
61
+ alignItems: 'center',
62
+ gap: '5px',
63
+ '& .ss__list__option__label , .ss__list__option__icon': {
64
+ cursor: 'pointer',
65
+ },
66
+ },
67
+ '&.ss__list--disabled, .ss__list__option--disabled': {
68
+ cursor: 'none',
69
+ pointerEvents: 'none',
70
+ opacity: 0.5,
71
+ },
72
+ '&.ss__list--disabled, .ss__list__option--unavailable': {
73
+ cursor: 'pointer',
74
+ opacity: 0.5,
75
+ },
76
+ '.ss__list__option--selected': {
77
+ fontWeight: 'bold',
78
+ },
79
+ });
80
+ },
81
+ };
82
+ function List(properties) {
83
+ var _a, _b, _c;
84
+ var globalTheme = (0, providers_1.useTheme)();
85
+ var props = __assign(__assign(__assign({}, (_a = globalTheme === null || globalTheme === void 0 ? void 0 : globalTheme.components) === null || _a === void 0 ? void 0 : _a.list), properties), (_c = (_b = properties.theme) === null || _b === void 0 ? void 0 : _b.components) === null || _c === void 0 ? void 0 : _c.list);
86
+ var titleText = props.titleText, onSelect = props.onSelect, native = props.native, multiSelect = props.multiSelect, hideOptionLabels = props.hideOptionLabels, hideOptionIcons = props.hideOptionIcons, hideOptionCheckboxes = props.hideOptionCheckboxes, disabled = props.disabled, options = props.options, requireSelection = props.requireSelection, disableStyles = props.disableStyles, className = props.className, style = props.style, horizontal = props.horizontal;
87
+ var selected = props.selected;
88
+ var subProps = {
89
+ checkbox: __assign(__assign({
90
+ // default props
91
+ native: native }, (0, utilities_1.defined)({
92
+ disableStyles: disableStyles,
93
+ })), {
94
+ // component theme overrides
95
+ theme: props === null || props === void 0 ? void 0 : props.theme }),
96
+ icon: __assign(__assign({
97
+ // default props
98
+ className: 'ss__list__option__icon' }, (0, utilities_1.defined)({
99
+ disableStyles: disableStyles,
100
+ })), {
101
+ // component theme overrides
102
+ theme: props === null || props === void 0 ? void 0 : props.theme }),
103
+ };
104
+ var styling = {};
105
+ if (!disableStyles) {
106
+ styling.css = [CSS.List({ horizontal: horizontal }), style];
107
+ }
108
+ else if (style) {
109
+ styling.css = [style];
110
+ }
111
+ if (selected && !Array.isArray(selected)) {
112
+ selected = [selected];
113
+ }
114
+ // selection state
115
+ var _d = (0, react_2.useState)(selected || []), selection = _d[0], setSelection = _d[1];
116
+ var makeSelection = function (e, option) {
117
+ var newArray;
118
+ if (multiSelect) {
119
+ if (selection.find(function (select) { return select.value === option.value; })) {
120
+ newArray = __spreadArray([], selection, true);
121
+ newArray.splice(newArray.findIndex(function (select) { return select.value === option.value; }), 1);
122
+ if (newArray.length == 0 && requireSelection) {
123
+ newArray = [option];
124
+ }
125
+ }
126
+ else {
127
+ newArray = __spreadArray(__spreadArray([], selection, true), [option], false);
128
+ }
129
+ }
130
+ else {
131
+ if (!requireSelection && selection.find(function (select) { return select.value === option.value; })) {
132
+ newArray = [];
133
+ }
134
+ else {
135
+ newArray = [option];
136
+ }
137
+ }
138
+ if (onSelect) {
139
+ onSelect(e, option, newArray);
140
+ }
141
+ setSelection(newArray);
142
+ };
143
+ return typeof options == 'object' && (options === null || options === void 0 ? void 0 : options.length) ? ((0, react_1.jsx)(providers_1.CacheProvider, null,
144
+ (0, react_1.jsx)("div", __assign({}, styling, { className: (0, classnames_1.default)('ss__list', disabled ? 'ss__list--disabled' : '', className) }),
145
+ titleText && (0, react_1.jsx)("h5", { className: "ss__list__title" }, titleText),
146
+ (0, react_1.jsx)("ul", { className: "ss__list__options", role: "listbox", "aria-label": titleText }, options.map(function (option) {
147
+ var selected = selection.some(function (select) { return select.value == option.value; });
148
+ return ((0, react_1.jsx)("li", { className: (0, classnames_1.default)("ss__list__option ss__list__option--".concat(snap_toolbox_1.filters.handleize(option.value.toString())), {
149
+ 'ss__list__option--selected': selected,
150
+ 'ss__list__option--disabled': option === null || option === void 0 ? void 0 : option.disabled,
151
+ 'ss__list__option--unavailable': (option === null || option === void 0 ? void 0 : option.available) === false,
152
+ }), ref: function (e) { return (0, hooks_1.useA11y)(e); }, onClick: function (e) { return !disabled && !(option === null || option === void 0 ? void 0 : option.disabled) && makeSelection(e, option); }, title: option.label, role: "option", "aria-selected": selected },
153
+ !hideOptionCheckboxes && (0, react_1.jsx)(Checkbox_1.Checkbox, __assign({}, subProps.checkbox, { checked: selected, disableA11y: true })),
154
+ option.icon && !hideOptionIcons && ((0, react_1.jsx)(Icon_1.Icon, __assign({}, subProps.icon, (typeof option.icon == 'string' ? { icon: option.icon } : option.icon)))),
155
+ !hideOptionLabels && (option.label || !option.icon) && ((0, react_1.jsx)("label", { className: "ss__list__option__label" }, option.label || option.value))));
156
+ }))))) : ((0, react_1.jsx)(preact_1.Fragment, null));
157
+ }
158
+ exports.List = List;
@@ -0,0 +1,2 @@
1
+ export * from './List';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/List/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./List"), exports);
@@ -0,0 +1,19 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps, SwatchOption, BreakpointsProps } from '../../../types';
3
+ import { CarouselProps } from '../Carousel';
4
+ import { GridProps } from '../Grid';
5
+ export declare function Swatches(properties: SwatchesProps): JSX.Element;
6
+ export type SwatchesProps = {
7
+ options: SwatchOption[];
8
+ onSelect?: (e: React.MouseEvent<HTMLElement>, option: SwatchOption) => void;
9
+ selected?: SwatchOption;
10
+ hideLabels?: boolean;
11
+ breakpoints?: BreakpointsProps;
12
+ } & ({
13
+ type?: 'carousel';
14
+ carousel?: Partial<CarouselProps>;
15
+ } | {
16
+ type?: 'grid';
17
+ grid?: Partial<GridProps>;
18
+ }) & ComponentProps;
19
+ //# sourceMappingURL=Swatches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Swatches.d.ts","sourceRoot":"","sources":["../../../../../src/components/Molecules/Swatches/Swatches.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAc,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG5F,OAAO,EAAY,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAQ,SAAS,EAAE,MAAM,SAAS,CAAC;AAoD1C,wBAAgB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CA2K/D;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5E,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC/B,GAAG,CACD;IACA,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC,GACD;IACA,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB,CACH,GACA,cAAc,CAAC"}