@4alldigital/foundation-ui--gamma 1.31.7 → 1.31.9

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/index.esm.js CHANGED
@@ -1,9 +1,15 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import cx from 'classnames';
3
3
  import { Icon as Icon$1 } from '@iconify/react';
4
- import React, { useEffect } from 'react';
4
+ import React, { useEffect, useMemo } from 'react';
5
5
  import HoverVideoPlayer from 'react-hover-video-player';
6
6
  import { useForm, FormProvider, useFormContext, Controller } from 'react-hook-form';
7
+ import '@elastic/eui/dist/eui_theme_light.css';
8
+ import ElasticSearchAPIConnector from '@elastic/search-ui-elasticsearch-connector';
9
+ import { SearchProvider, WithSearch, ErrorBoundary, SearchBox as SearchBox$1, Sorting as Sorting$1, Facet, Results as Results$1, PagingInfo as PagingInfo$1, ResultsPerPage as ResultsPerPage$1, Paging as Paging$1 } from '@elastic/react-search-ui';
10
+ import '@elastic/react-search-ui-views/lib/styles/styles.css';
11
+ import RCPagination from 'rc-pagination';
12
+ import enUsLocale from 'rc-pagination/lib/locale/en_US';
7
13
 
8
14
  var Blockquote = function (_a) {
9
15
  var text = _a.text, citation = _a.citation, className = _a.className, citationAttribute = _a.citationAttribute, _b = _a.showIcon, showIcon = _b === void 0 ? true : _b;
@@ -612,7 +618,7 @@ var Card = function (_a) {
612
618
  Card.displayName = 'Card';
613
619
 
614
620
  var Form = function (_a) {
615
- var children = _a.children, className = _a.className, submit = _a.submit, _b = _a.onSubmit, onSubmit = _b === void 0 ? function () { } : _b, onChange = _a.onChange, hideSubmit = _a.hideSubmit, ariaSubmitLabel = _a.ariaSubmitLabel, submitID = _a.submitID, _c = _a.submitVariant, submitVariant = _c === void 0 ? BTN_VARIANTS.PRIMARY : _c, _d = _a.initialValues, initialValues = _d === void 0 ? {} : _d, _e = _a.isBoxed, isBoxed = _e === void 0 ? false : _e, _f = _a.submitType, submitType = _f === void 0 ? BTN_TYPES.SUBMIT : _f, _g = _a.disabledSubmitWithReturn, disabledSubmitWithReturn = _g === void 0 ? false : _g;
621
+ var children = _a.children, className = _a.className, submit = _a.submit, _b = _a.onSubmit, onSubmit = _b === void 0 ? function () { } : _b, onChange = _a.onChange, hideSubmit = _a.hideSubmit, ariaSubmitLabel = _a.ariaSubmitLabel, submitID = _a.submitID, _c = _a.submitVariant, submitVariant = _c === void 0 ? BTN_VARIANTS.PRIMARY : _c, _d = _a.initialValues, initialValues = _d === void 0 ? {} : _d, _e = _a.isBoxed, isBoxed = _e === void 0 ? false : _e, _f = _a.submitType, submitType = _f === void 0 ? BTN_TYPES.SUBMIT : _f, _g = _a.disabledSubmitWithReturn, disabledSubmitWithReturn = _g === void 0 ? false : _g, _h = _a.isDisabled, isDisabled = _h === void 0 ? false : _h;
616
622
  var methods = useForm({
617
623
  defaultValues: initialValues,
618
624
  mode: 'onBlur',
@@ -626,10 +632,11 @@ var Form = function (_a) {
626
632
  }, []);
627
633
  var submitClasses = cx({ 'sr-only': hideSubmit });
628
634
  return (jsx(FormProvider, __assign({}, methods, { children: jsx("div", { "data-testid": "Form", className: cx('w-full max-w-s @containers @form'), children: jsxs("form", { onSubmit: methods.handleSubmit(onSubmit), onKeyDown: function (event) {
635
+ console.info('onKeyDown event', event);
629
636
  if (disabledSubmitWithReturn && event.key === 'Enter') {
630
637
  event.preventDefault();
631
638
  }
632
- }, className: cx('mb-4 w-2xs relative', { 'form px-8 pt-6 pb-8 ': isBoxed }, { 'opacity-50': methods.formState.isSubmitting }, className), children: [children, submit && (jsx("div", { className: "flex items-center justify-end py-2", children: jsx(Button, { id: submitID || submit, className: submitClasses, ariaLabel: ariaSubmitLabel || submit || 'Submit', type: submitType, outline: true, isLoading: methods.formState.isSubmitting, disabled: methods.formState.isSubmitting || !methods.formState.isValid, variant: submitVariant, children: submit }) }))] }) }) })));
639
+ }, className: cx('mb-4 w-2xs relative', { 'form px-8 pt-6 pb-8 ': isBoxed }, { 'opacity-50': methods.formState.isSubmitting }, className), children: [children, submit && (jsx("div", { className: "flex items-center justify-end py-2", children: jsx(Button, { id: submitID || submit, className: submitClasses, ariaLabel: ariaSubmitLabel || submit || 'Submit', type: submitType, outline: true, isLoading: methods.formState.isSubmitting, disabled: methods.formState.isSubmitting || !methods.formState.isValid || isDisabled, variant: submitVariant, children: submit }) }))] }) }) })));
633
640
  };
634
641
  Form.displayName = 'Form';
635
642
 
@@ -794,4 +801,318 @@ var CardVariant;
794
801
  CardVariant["VIDEO"] = "video";
795
802
  })(CardVariant || (CardVariant = {}));
796
803
 
797
- export { BTN_SIZES, BTN_TYPES, BTN_VARIANTS, Blockquote, Button, COPY_ALIGN, COPY_CONTEXTUAL, COPY_SIZE, COPY_TAG, COPY_TRANSFORM, CPL_SPACING, CRL_SIZE, Card, CardVariant, Container, ContentPageLayout, ContentRowsLayout, Copy, FIELD_TYPES, Form, FormField, HEADING_ALIGN, HEADING_TAGS, HEADING_TRANSFORM, Heading, Hr, Icon, Image, Link, List, ListItem, ListTag, Loader, Notice, Variants };
804
+ var ResultAsTypes;
805
+ (function (ResultAsTypes) {
806
+ ResultAsTypes["cardBasic"] = "cardBasic";
807
+ ResultAsTypes["cardMedia"] = "cardMedia";
808
+ ResultAsTypes["cardVideo"] = "cardVideo";
809
+ })(ResultAsTypes || (ResultAsTypes = {}));
810
+
811
+ function Sorting(_a) {
812
+ var className = _a.className, label = _a.label, onChange = _a.onChange, options = _a.options;
813
+ return (jsxs("div", { className: cx('m-0 p-0 mb-2 border-none', className), children: [jsx(Label, { className: "text-sm", transform: COPY_TRANSFORM.UPPERCASE, children: label }), jsx(FormSelect, { id: label || 'Sorting', options: options, onChange: function (o) { return onChange(o.target.value); } })] }));
814
+ }
815
+ Sorting.displayName = 'Sorting';
816
+
817
+ // import { BTN_SIZES, BTN_VARIANTS, Button, Icon } from '../../../../components';
818
+ // const itemRender = (current: number, type: string, element: React.ReactNode, ...rest: any) => {
819
+ // console.log('itemRender', rest);
820
+ // if (type === 'page') {
821
+ // return <a href={`#${current}`}>{current}</a>;
822
+ // }
823
+ // if (type === 'prev') {
824
+ // return <Button variant={BTN_VARIANTS.PRIMARY} size={BTN_SIZES.SMALL}><Icon name="mdi:chevron-left" /></Button>;
825
+ // }
826
+ // if (type === 'next') {
827
+ // return <button type="button">Next</button>;
828
+ // }
829
+ // return element;
830
+ // };
831
+ function Paging(_a) {
832
+ var className = _a.className, current = _a.current, _b = _a.resultsPerPage, resultsPerPage = _b === void 0 ? 10 : _b, onChange = _a.onChange, totalPages = _a.totalPages, rest = __rest(_a, ["className", "current", "resultsPerPage", "onChange", "totalPages"]);
833
+ return (jsx(RCPagination, __assign({ current: current, onChange: onChange, simple: true, pageSize: resultsPerPage, total: totalPages * resultsPerPage, className: cx('m-0 p-0 list-none text-white', className), locale: enUsLocale, prevIcon: jsx(Icon, { name: "mdi:chevron-left" }), nextIcon: jsx(Icon, { name: "mdi:chevron-right" }) }, rest)));
834
+ }
835
+ Paging.displayName = 'Paging';
836
+
837
+ function ResultsPerPage(_a) {
838
+ var className = _a.className, onChange = _a.onChange, options = _a.options, label = _a.label, rest = __rest(_a, ["className", "onChange", "options", "label"]);
839
+ // Return nothing without options.
840
+ if (!options) {
841
+ return jsx(Fragment, {});
842
+ }
843
+ return (jsxs("div", __assign({ className: cx('m-0 p-0 border-none flex items-center justify-end', className) }, rest, { children: [jsx(Label, { className: "text-sm mr-2", transform: COPY_TRANSFORM.UPPERCASE, children: "Show" }), jsx(FormSelect, { id: label || 'ResultsPerPage', options: options.map(function (option) { return ({ label: option.toString(), value: option }); }), onChange: function (o) { return onChange(o.target.value); }, className: 'min-w-20' })] })));
844
+ }
845
+ ResultsPerPage.displayName = 'ResultsPerPage';
846
+
847
+ function PagingInfo(_a) {
848
+ var className = _a.className, end = _a.end, searchTerm = _a.searchTerm, start = _a.start, totalResults = _a.totalResults, rest = __rest(_a, ["className", "end", "searchTerm", "start", "totalResults"]);
849
+ return (jsxs("div", __assign({ className: cx("m-0 p-0", className) }, rest, { children: ["Showing", " ", jsxs("strong", { children: [start, " - ", end] }), " ", "out of ", jsx("strong", { children: totalResults }), searchTerm && (jsxs(Fragment, { children: [" ", "for: ", jsx("em", { children: searchTerm })] }))] })));
850
+ }
851
+ PagingInfo.displayName = 'PagingInfo';
852
+
853
+ function SearchBox(_a) {
854
+ var className = _a.className, onChange = _a.onChange, onSubmit = _a.onSubmit, rest = __rest(_a, ["className", "onChange", "onSubmit"]);
855
+ console.log('SearchBox: rest', rest);
856
+ return (jsx("div", { className: cx('m-0', className), children: jsxs("form", { onSubmit: function (e) { return onSubmit(e); }, className: "flex items-center", children: [jsx("div", { className: "flex-1", children: jsx(TextInput, { name: "SearchBoxInput", type: InputType.TEXT, placeholder: "Search now....", onChange: function (e) {
857
+ var _a;
858
+ onChange((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.value);
859
+ } }) }), jsx("div", { className: "pl-2", children: jsx(Button, { type: BTN_TYPES.SUBMIT, variant: BTN_VARIANTS.PRIMARY, children: "Search" }) })] }) }));
860
+ }
861
+ SearchBox.displayName = 'SearchBox';
862
+
863
+ // import Sidebar from "../Sidebar";
864
+ function Layout(_a) {
865
+ var className = _a.className, children = _a.children, header = _a.header, bodyContent = _a.bodyContent, bodyFooter = _a.bodyFooter, bodyHeader = _a.bodyHeader, sideContent = _a.sideContent;
866
+ var sidebarClasses = cx('hidden md:block fixed md:relative w-full h-full left-0 md:left-auto top-0 md:top-auto px-2 pb-4 md:pt-6 md:px-6 md:pb-auto md:pl-0', { 'hidden md:hidden': !sideContent });
867
+ return (jsxs("div", { className: cx('w-full flex flex-col', className), children: [jsx("div", { className: "m-auto p-4 md:py-0 md:px-6 max-w-7xl w-full", children: header }), jsxs("div", { className: cx('md:grid m-auto p-4 md:py-0 md:px-6 max-w-7xl w-full', {
868
+ 'md:grid-cols-search-layout': !sideContent,
869
+ 'md:grid-cols-search-layout-with-sidebar': sideContent,
870
+ }), children: [jsx("div", { className: sidebarClasses, children: sideContent }), jsxs("div", { className: cx('p-0 pt-2 md:p-6 md:pr-0', {
871
+ 'md:pl-0': !sideContent,
872
+ }), children: [jsx("div", { className: "flex items-center justify-between", children: bodyHeader }), jsx("div", { className: "relative", children: children || bodyContent }), jsx("div", { className: "flex items-center justify-around", children: bodyFooter })] })] })] }));
873
+ }
874
+ Layout.displayName = 'Layout';
875
+
876
+ function Results(_a) {
877
+ var children = _a.children, className = _a.className, rest = __rest(_a, ["children", "className"]);
878
+ console.log('Results: rest', rest);
879
+ return (jsx("ul", __assign({ className: cx('relative grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-4', className) }, rest, { children: children })));
880
+ }
881
+ Results.displayName = 'Results';
882
+
883
+ /*
884
+ Since Filter Values come in many different varieties, this helper
885
+ encapsulates the logic for determining how to show the label of that
886
+ filter in the UI.
887
+ */
888
+ function getFilterValueDisplay(filterValue) {
889
+ if (filterValue === undefined || filterValue === null)
890
+ return '';
891
+ if (Object.prototype.hasOwnProperty.call(filterValue, 'name'))
892
+ return filterValue.name;
893
+ return String(filterValue);
894
+ }
895
+
896
+ function getFieldType(object, type) {
897
+ if (object)
898
+ return object[type];
899
+ }
900
+ function getRaw(object) {
901
+ return getFieldType(object, 'raw');
902
+ }
903
+ function getSnippet(object) {
904
+ return getFieldType(object, 'snippet');
905
+ }
906
+ function htmlEscape(str) {
907
+ if (!str)
908
+ return '';
909
+ return String(str)
910
+ .replace(/&/g, '&amp;')
911
+ .replace(/"/g, '&quot;')
912
+ .replace(/'/g, '&#39;')
913
+ .replace(/</g, '&lt;')
914
+ .replace(/>/g, '&gt;');
915
+ }
916
+ function getEscapedField(maybeObject) {
917
+ // Fallback to raw values here, because non-string fields
918
+ // will not have a snippet fallback. Raw values MUST be html escaped.
919
+ var safeField = getSnippet(maybeObject) || htmlEscape(getRaw(maybeObject));
920
+ return Array.isArray(safeField) ? safeField.join(', ') : safeField;
921
+ }
922
+
923
+ function Result(_a) {
924
+ var className = _a.className, result = _a.result,
925
+ // onClickLink,
926
+ as = _a.as, _b = _a.cardMap, cardMap = _b === void 0 ? {
927
+ idField: { fieldName: 'uuid' },
928
+ titleField: { fieldName: 'title' },
929
+ descriptionField: { fieldName: 'description' },
930
+ imageField: { fieldName: 'image' },
931
+ } : _b;
932
+ console.log('Result', cardMap);
933
+ // Pass fields into the relevant Card.
934
+ // const fields: any = formatResult(result);
935
+ var idField = cardMap.idField, titleField = cardMap.titleField, imageField = cardMap.imageField, videoField = cardMap.videoField, descriptionField = cardMap.descriptionField, metaDataFields = cardMap.metaDataFields, cardProps = cardMap.cardProps, rest = __rest(cardMap, ["idField", "titleField", "imageField", "videoField", "descriptionField", "metaDataFields", "cardProps"]);
936
+ console.log('rest', rest);
937
+ console.log('cardProps', cardProps);
938
+ var id = idField && getEscapedField(result[idField.fieldName]);
939
+ var title = titleField && getEscapedField(result[titleField.fieldName]);
940
+ var imageUrl = imageField && getEscapedField(result[imageField.fieldName]);
941
+ var videoUrl = videoField && videoField.formatter
942
+ ? videoField.formatter(getEscapedField(result[videoField.fieldName]))
943
+ : videoField && getEscapedField(result[videoField.fieldName]);
944
+ var description = descriptionField && getEscapedField(result[descriptionField.fieldName]);
945
+ var metaData = metaDataFields &&
946
+ metaDataFields.map(function (field) {
947
+ var value = getEscapedField(result[field.fieldName]);
948
+ if (field.formatter && typeof field.formatter === 'function') {
949
+ return field.formatter(value);
950
+ }
951
+ });
952
+ // console.log('Result metaData:', metaData);
953
+ // console.log('Result', cardMap);
954
+ var resultView = function () {
955
+ var imageData = {
956
+ src: imageUrl || '',
957
+ alt: title || '',
958
+ title: title || '',
959
+ width: 500,
960
+ height: 500,
961
+ };
962
+ var cardData = {
963
+ id: id,
964
+ title: title,
965
+ image: imageData,
966
+ video: videoUrl,
967
+ description: description,
968
+ metaData: metaData,
969
+ actions: cardMap.actionsData,
970
+ onClick: cardMap.onClickLink,
971
+ };
972
+ switch (as) {
973
+ case ResultAsTypes.cardMedia:
974
+ return jsx(Card, __assign({ variant: CardVariant.MEDIA, data: cardData }, cardProps));
975
+ case ResultAsTypes.cardVideo:
976
+ return jsx(Card, __assign({ variant: CardVariant.VIDEO, data: cardData }, cardProps, { isMuted: false }));
977
+ default:
978
+ return jsx(Card, __assign({ variant: CardVariant.BASIC, data: cardData }, cardProps));
979
+ }
980
+ };
981
+ return jsx("li", { className: cx('relative', className), children: resultView() });
982
+ }
983
+ Result.displayName = 'Result';
984
+
985
+ var connector = new ElasticSearchAPIConnector({
986
+ host: process.env.REACT_ELASTICSEARCH_HOST,
987
+ index: process.env.REACT_ELASTICSEARCH_INDEX || '',
988
+ apiKey: process.env.REACT_ELASTICSEARCH_API_KEY,
989
+ });
990
+ var SORT_OPTIONS = [
991
+ {
992
+ name: 'Relevance',
993
+ value: [],
994
+ },
995
+ {
996
+ name: 'Title',
997
+ value: [
998
+ {
999
+ field: 'title.keyword',
1000
+ direction: 'asc',
1001
+ },
1002
+ ],
1003
+ },
1004
+ {
1005
+ name: 'Created',
1006
+ value: [
1007
+ {
1008
+ field: 'created',
1009
+ direction: 'desc',
1010
+ },
1011
+ ],
1012
+ },
1013
+ ];
1014
+ function Search(_a) {
1015
+ var _b = _a.showOptions, showOptions = _b === void 0 ? [10, 25, 50] : _b, _c = _a.resultAs, resultAs = _c === void 0 ? ResultAsTypes.cardBasic : _c, ResultFieldMap = _a.ResultFieldMap, _d = _a.config, config = _d === void 0 ? {
1016
+ filters: [],
1017
+ facets: {},
1018
+ searchFields: {},
1019
+ resultsFields: {},
1020
+ } : _d, _e = _a.facetDisplay, facetDisplay = _e === void 0 ? [] : _e, _f = _a.noSidebar, noSidebar = _f === void 0 ? false : _f;
1021
+ var searchConfig = useMemo(function () {
1022
+ return {
1023
+ debug: true,
1024
+ alwaysSearchOnInitialLoad: true,
1025
+ apiConnector: connector,
1026
+ hasA11yNotifications: true,
1027
+ searchQuery: {
1028
+ filters: config.filters || [],
1029
+ search_fields: config.searchFields || {},
1030
+ result_fields: config.resultsFields || {},
1031
+ // disjunctiveFacets: ['created'], // Make certain Facets into OR instead of AND
1032
+ facets: config.facets,
1033
+ },
1034
+ autocompleteQuery: {
1035
+ results: {
1036
+ search_fields: {
1037
+ title: {},
1038
+ description: {},
1039
+ },
1040
+ resultsPerPage: 5,
1041
+ result_fields: {
1042
+ title: {
1043
+ snippet: {
1044
+ size: 100,
1045
+ fallback: true,
1046
+ },
1047
+ },
1048
+ },
1049
+ },
1050
+ // TODO: Implement suggestions
1051
+ // suggestions: {
1052
+ // types: {
1053
+ // documents: {
1054
+ // fields: ['title'],
1055
+ // },
1056
+ // },
1057
+ // size: 4,
1058
+ // },
1059
+ },
1060
+ };
1061
+ }, [config]);
1062
+ return (jsx(SearchProvider, { config: searchConfig, children: jsx(WithSearch, { mapContextToProps: function (_a) {
1063
+ var wasSearched = _a.wasSearched;
1064
+ return ({
1065
+ wasSearched: wasSearched,
1066
+ });
1067
+ }, children: function (_a) {
1068
+ var wasSearched = _a.wasSearched;
1069
+ return (jsx("div", { className: "App", children: jsx(ErrorBoundary, { children: jsx(Layout, { header: jsx(SearchBox$1, { view: SearchBox }), sideContent: !noSidebar && (jsxs("div", { children: [wasSearched && jsx(Sorting$1, { label: 'Sort by', sortOptions: SORT_OPTIONS, view: Sorting }), facetDisplay.map(function (_a) {
1070
+ var field = _a.field, label = _a.label, view = _a.view;
1071
+ return (jsx(Facet, { field: field, label: label, view: view }, field));
1072
+ })] })), bodyContent: jsx(Results$1, { shouldTrackClickThrough: false, resultView: function (props) { return jsx(Result, __assign({}, props, { as: resultAs, cardMap: ResultFieldMap })); }, className: "list-none p-0 m-0", view: Results }), bodyHeader: jsxs(React.Fragment, { children: [wasSearched && jsx(PagingInfo$1, { view: PagingInfo }), wasSearched && jsx(ResultsPerPage$1, { view: ResultsPerPage, options: showOptions })] }), bodyFooter: jsx(Paging$1, { view: Paging }), noSidebar: noSidebar }) }) }));
1073
+ } }) }));
1074
+ }
1075
+
1076
+ function SingleSelectFacet(_a) {
1077
+ var className = _a.className, label = _a.label, onChange = _a.onChange, options = _a.options;
1078
+ var selectBoxOptions = options.map(function (option) {
1079
+ return {
1080
+ value: option.value,
1081
+ label: "".concat(option.value, " (").concat(option.count, ")"),
1082
+ };
1083
+ });
1084
+ return (jsxs("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: [jsx(Label, { className: "text-sm", transform: COPY_TRANSFORM.UPPERCASE, children: label }), jsx(FormSelect, { id: label, options: selectBoxOptions, onChange: function (o) { return onChange(o.target.value); } })] }));
1085
+ }
1086
+ SingleSelectFacet.displayName = 'SingleSelectFacet';
1087
+
1088
+ function SingleLinksFacet(_a) {
1089
+ var className = _a.className, label = _a.label, onRemove = _a.onRemove, onSelect = _a.onSelect, options = _a.options;
1090
+ var value = options.filter(function (o) { return o.selected; }).map(function (o) { return o.value; })[0];
1091
+ return (jsx("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: jsxs("div", { children: [jsx(Label, { className: "text-sm", transform: COPY_TRANSFORM.UPPERCASE, children: label }), jsxs("ul", { className: "ul list-none p-0", children: [value && (jsxs("li", { className: "m-0 flex justify-between items-center flex-1", children: [getFilterValueDisplay(value), jsx("span", { className: "ml-1 px-1", children: jsx(Button, { onClick: function () { return onRemove(value); }, children: jsx(Icon, { name: "mdi:close" }) }) })] })), !value &&
1092
+ options.map(function (option) {
1093
+ var filterValue = getFilterValueDisplay(option.value);
1094
+ return (jsxs("li", { className: "m-0 flex justify-between", children: [jsx("a", { className: "no-underline text-sm visited:text-body-text", "data-transaction-name": "facet - ".concat(label), href: "/", onClick: function (e) {
1095
+ e.preventDefault();
1096
+ onSelect(option.value);
1097
+ }, children: jsx("label", { className: "label pl-0 leading-none text-sm", children: filterValue }) }), jsx(Copy, { as: COPY_TAG.SPAN, size: COPY_SIZE.SMALL, children: option.count.toLocaleString('en') })] }, filterValue));
1098
+ })] })] }) }));
1099
+ }
1100
+ SingleLinksFacet.displayName = 'SingleLinksFacet';
1101
+
1102
+ function MultiCheckboxFacet(_a) {
1103
+ var className = _a.className, label = _a.label, onMoreClick = _a.onMoreClick, onRemove = _a.onRemove, onSelect = _a.onSelect, options = _a.options, showMore = _a.showMore, showSearch = _a.showSearch, onSearch = _a.onSearch, searchPlaceholder = _a.searchPlaceholder;
1104
+ if (!options) {
1105
+ return jsx(Fragment, { children: "Options required" });
1106
+ }
1107
+ return (jsxs("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: [jsx(Label, { className: "text-sm", transform: COPY_TRANSFORM.UPPERCASE, children: label }), showSearch && (jsx("div", { className: "mt-1", children: jsx(TextInput, { type: InputType.SEARCH, placeholder: searchPlaceholder || 'Search', onChange: function (e) {
1108
+ onSearch(e.target.value);
1109
+ } }) })), jsxs("div", { className: "my-4", children: [(options === null || options === void 0 ? void 0 : options.length) < 1 && jsx("div", { children: "No matching options" }), options === null || options === void 0 ? void 0 : options.map(function (option) {
1110
+ var checked = option.selected;
1111
+ var value = option.value;
1112
+ var filterDisplayValue = getFilterValueDisplay(value);
1113
+ return (jsxs("div", { className: "flex justify-between pb-2", children: [jsx(Checkbox, { id: "facet_".concat(label).concat(filterDisplayValue), "data-transaction-name": "facet - ".concat(label), checked: checked, onChange: function () { return (checked ? onRemove(value) : onSelect(value)); }, label: filterDisplayValue }), jsx(Copy, { as: COPY_TAG.SPAN, size: COPY_SIZE.SMALL, children: option.count.toLocaleString('en') })] }, filterDisplayValue));
1114
+ })] }), showMore && (jsx(Button, { size: BTN_SIZES.SMALL, variant: BTN_VARIANTS.TERTIARY, onClick: onMoreClick, "aria-label": "Show more options", children: "+ More" }))] }));
1115
+ }
1116
+ MultiCheckboxFacet.displayName = 'MultiCheckboxFacet';
1117
+
1118
+ export { BTN_SIZES, BTN_TYPES, BTN_VARIANTS, Blockquote, Button, COPY_ALIGN, COPY_CONTEXTUAL, COPY_SIZE, COPY_TAG, COPY_TRANSFORM, CPL_SPACING, CRL_SIZE, Card, CardVariant, Container, ContentPageLayout, ContentRowsLayout, Copy, FIELD_TYPES, Form, FormField, HEADING_ALIGN, HEADING_TAGS, HEADING_TRANSFORM, Heading, Hr, Icon, Image, Link, List, ListItem, ListTag, Loader, MultiCheckboxFacet, Notice, ResultAsTypes, Search, SingleLinksFacet, SingleSelectFacet, Variants };
package/dist/index.js CHANGED
@@ -6,6 +6,12 @@ var react = require('@iconify/react');
6
6
  var React = require('react');
7
7
  var HoverVideoPlayer = require('react-hover-video-player');
8
8
  var reactHookForm = require('react-hook-form');
9
+ require('@elastic/eui/dist/eui_theme_light.css');
10
+ var ElasticSearchAPIConnector = require('@elastic/search-ui-elasticsearch-connector');
11
+ var reactSearchUi = require('@elastic/react-search-ui');
12
+ require('@elastic/react-search-ui-views/lib/styles/styles.css');
13
+ var RCPagination = require('rc-pagination');
14
+ var enUsLocale = require('rc-pagination/lib/locale/en_US');
9
15
 
10
16
  var Blockquote = function (_a) {
11
17
  var text = _a.text, citation = _a.citation, className = _a.className, citationAttribute = _a.citationAttribute, _b = _a.showIcon, showIcon = _b === void 0 ? true : _b;
@@ -614,7 +620,7 @@ var Card = function (_a) {
614
620
  Card.displayName = 'Card';
615
621
 
616
622
  var Form = function (_a) {
617
- var children = _a.children, className = _a.className, submit = _a.submit, _b = _a.onSubmit, onSubmit = _b === void 0 ? function () { } : _b, onChange = _a.onChange, hideSubmit = _a.hideSubmit, ariaSubmitLabel = _a.ariaSubmitLabel, submitID = _a.submitID, _c = _a.submitVariant, submitVariant = _c === void 0 ? exports.BTN_VARIANTS.PRIMARY : _c, _d = _a.initialValues, initialValues = _d === void 0 ? {} : _d, _e = _a.isBoxed, isBoxed = _e === void 0 ? false : _e, _f = _a.submitType, submitType = _f === void 0 ? exports.BTN_TYPES.SUBMIT : _f, _g = _a.disabledSubmitWithReturn, disabledSubmitWithReturn = _g === void 0 ? false : _g;
623
+ var children = _a.children, className = _a.className, submit = _a.submit, _b = _a.onSubmit, onSubmit = _b === void 0 ? function () { } : _b, onChange = _a.onChange, hideSubmit = _a.hideSubmit, ariaSubmitLabel = _a.ariaSubmitLabel, submitID = _a.submitID, _c = _a.submitVariant, submitVariant = _c === void 0 ? exports.BTN_VARIANTS.PRIMARY : _c, _d = _a.initialValues, initialValues = _d === void 0 ? {} : _d, _e = _a.isBoxed, isBoxed = _e === void 0 ? false : _e, _f = _a.submitType, submitType = _f === void 0 ? exports.BTN_TYPES.SUBMIT : _f, _g = _a.disabledSubmitWithReturn, disabledSubmitWithReturn = _g === void 0 ? false : _g, _h = _a.isDisabled, isDisabled = _h === void 0 ? false : _h;
618
624
  var methods = reactHookForm.useForm({
619
625
  defaultValues: initialValues,
620
626
  mode: 'onBlur',
@@ -628,10 +634,11 @@ var Form = function (_a) {
628
634
  }, []);
629
635
  var submitClasses = cx({ 'sr-only': hideSubmit });
630
636
  return (jsxRuntime.jsx(reactHookForm.FormProvider, __assign({}, methods, { children: jsxRuntime.jsx("div", { "data-testid": "Form", className: cx('w-full max-w-s @containers @form'), children: jsxRuntime.jsxs("form", { onSubmit: methods.handleSubmit(onSubmit), onKeyDown: function (event) {
637
+ console.info('onKeyDown event', event);
631
638
  if (disabledSubmitWithReturn && event.key === 'Enter') {
632
639
  event.preventDefault();
633
640
  }
634
- }, className: cx('mb-4 w-2xs relative', { 'form px-8 pt-6 pb-8 ': isBoxed }, { 'opacity-50': methods.formState.isSubmitting }, className), children: [children, submit && (jsxRuntime.jsx("div", { className: "flex items-center justify-end py-2", children: jsxRuntime.jsx(Button, { id: submitID || submit, className: submitClasses, ariaLabel: ariaSubmitLabel || submit || 'Submit', type: submitType, outline: true, isLoading: methods.formState.isSubmitting, disabled: methods.formState.isSubmitting || !methods.formState.isValid, variant: submitVariant, children: submit }) }))] }) }) })));
641
+ }, className: cx('mb-4 w-2xs relative', { 'form px-8 pt-6 pb-8 ': isBoxed }, { 'opacity-50': methods.formState.isSubmitting }, className), children: [children, submit && (jsxRuntime.jsx("div", { className: "flex items-center justify-end py-2", children: jsxRuntime.jsx(Button, { id: submitID || submit, className: submitClasses, ariaLabel: ariaSubmitLabel || submit || 'Submit', type: submitType, outline: true, isLoading: methods.formState.isSubmitting, disabled: methods.formState.isSubmitting || !methods.formState.isValid || isDisabled, variant: submitVariant, children: submit }) }))] }) }) })));
635
642
  };
636
643
  Form.displayName = 'Form';
637
644
 
@@ -796,6 +803,320 @@ exports.CardVariant = void 0;
796
803
  CardVariant["VIDEO"] = "video";
797
804
  })(exports.CardVariant || (exports.CardVariant = {}));
798
805
 
806
+ exports.ResultAsTypes = void 0;
807
+ (function (ResultAsTypes) {
808
+ ResultAsTypes["cardBasic"] = "cardBasic";
809
+ ResultAsTypes["cardMedia"] = "cardMedia";
810
+ ResultAsTypes["cardVideo"] = "cardVideo";
811
+ })(exports.ResultAsTypes || (exports.ResultAsTypes = {}));
812
+
813
+ function Sorting(_a) {
814
+ var className = _a.className, label = _a.label, onChange = _a.onChange, options = _a.options;
815
+ return (jsxRuntime.jsxs("div", { className: cx('m-0 p-0 mb-2 border-none', className), children: [jsxRuntime.jsx(Label, { className: "text-sm", transform: exports.COPY_TRANSFORM.UPPERCASE, children: label }), jsxRuntime.jsx(FormSelect, { id: label || 'Sorting', options: options, onChange: function (o) { return onChange(o.target.value); } })] }));
816
+ }
817
+ Sorting.displayName = 'Sorting';
818
+
819
+ // import { BTN_SIZES, BTN_VARIANTS, Button, Icon } from '../../../../components';
820
+ // const itemRender = (current: number, type: string, element: React.ReactNode, ...rest: any) => {
821
+ // console.log('itemRender', rest);
822
+ // if (type === 'page') {
823
+ // return <a href={`#${current}`}>{current}</a>;
824
+ // }
825
+ // if (type === 'prev') {
826
+ // return <Button variant={BTN_VARIANTS.PRIMARY} size={BTN_SIZES.SMALL}><Icon name="mdi:chevron-left" /></Button>;
827
+ // }
828
+ // if (type === 'next') {
829
+ // return <button type="button">Next</button>;
830
+ // }
831
+ // return element;
832
+ // };
833
+ function Paging(_a) {
834
+ var className = _a.className, current = _a.current, _b = _a.resultsPerPage, resultsPerPage = _b === void 0 ? 10 : _b, onChange = _a.onChange, totalPages = _a.totalPages, rest = __rest(_a, ["className", "current", "resultsPerPage", "onChange", "totalPages"]);
835
+ return (jsxRuntime.jsx(RCPagination, __assign({ current: current, onChange: onChange, simple: true, pageSize: resultsPerPage, total: totalPages * resultsPerPage, className: cx('m-0 p-0 list-none text-white', className), locale: enUsLocale, prevIcon: jsxRuntime.jsx(Icon, { name: "mdi:chevron-left" }), nextIcon: jsxRuntime.jsx(Icon, { name: "mdi:chevron-right" }) }, rest)));
836
+ }
837
+ Paging.displayName = 'Paging';
838
+
839
+ function ResultsPerPage(_a) {
840
+ var className = _a.className, onChange = _a.onChange, options = _a.options, label = _a.label, rest = __rest(_a, ["className", "onChange", "options", "label"]);
841
+ // Return nothing without options.
842
+ if (!options) {
843
+ return jsxRuntime.jsx(jsxRuntime.Fragment, {});
844
+ }
845
+ return (jsxRuntime.jsxs("div", __assign({ className: cx('m-0 p-0 border-none flex items-center justify-end', className) }, rest, { children: [jsxRuntime.jsx(Label, { className: "text-sm mr-2", transform: exports.COPY_TRANSFORM.UPPERCASE, children: "Show" }), jsxRuntime.jsx(FormSelect, { id: label || 'ResultsPerPage', options: options.map(function (option) { return ({ label: option.toString(), value: option }); }), onChange: function (o) { return onChange(o.target.value); }, className: 'min-w-20' })] })));
846
+ }
847
+ ResultsPerPage.displayName = 'ResultsPerPage';
848
+
849
+ function PagingInfo(_a) {
850
+ var className = _a.className, end = _a.end, searchTerm = _a.searchTerm, start = _a.start, totalResults = _a.totalResults, rest = __rest(_a, ["className", "end", "searchTerm", "start", "totalResults"]);
851
+ return (jsxRuntime.jsxs("div", __assign({ className: cx("m-0 p-0", className) }, rest, { children: ["Showing", " ", jsxRuntime.jsxs("strong", { children: [start, " - ", end] }), " ", "out of ", jsxRuntime.jsx("strong", { children: totalResults }), searchTerm && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [" ", "for: ", jsxRuntime.jsx("em", { children: searchTerm })] }))] })));
852
+ }
853
+ PagingInfo.displayName = 'PagingInfo';
854
+
855
+ function SearchBox(_a) {
856
+ var className = _a.className, onChange = _a.onChange, onSubmit = _a.onSubmit, rest = __rest(_a, ["className", "onChange", "onSubmit"]);
857
+ console.log('SearchBox: rest', rest);
858
+ return (jsxRuntime.jsx("div", { className: cx('m-0', className), children: jsxRuntime.jsxs("form", { onSubmit: function (e) { return onSubmit(e); }, className: "flex items-center", children: [jsxRuntime.jsx("div", { className: "flex-1", children: jsxRuntime.jsx(TextInput, { name: "SearchBoxInput", type: InputType.TEXT, placeholder: "Search now....", onChange: function (e) {
859
+ var _a;
860
+ onChange((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.value);
861
+ } }) }), jsxRuntime.jsx("div", { className: "pl-2", children: jsxRuntime.jsx(Button, { type: exports.BTN_TYPES.SUBMIT, variant: exports.BTN_VARIANTS.PRIMARY, children: "Search" }) })] }) }));
862
+ }
863
+ SearchBox.displayName = 'SearchBox';
864
+
865
+ // import Sidebar from "../Sidebar";
866
+ function Layout(_a) {
867
+ var className = _a.className, children = _a.children, header = _a.header, bodyContent = _a.bodyContent, bodyFooter = _a.bodyFooter, bodyHeader = _a.bodyHeader, sideContent = _a.sideContent;
868
+ var sidebarClasses = cx('hidden md:block fixed md:relative w-full h-full left-0 md:left-auto top-0 md:top-auto px-2 pb-4 md:pt-6 md:px-6 md:pb-auto md:pl-0', { 'hidden md:hidden': !sideContent });
869
+ return (jsxRuntime.jsxs("div", { className: cx('w-full flex flex-col', className), children: [jsxRuntime.jsx("div", { className: "m-auto p-4 md:py-0 md:px-6 max-w-7xl w-full", children: header }), jsxRuntime.jsxs("div", { className: cx('md:grid m-auto p-4 md:py-0 md:px-6 max-w-7xl w-full', {
870
+ 'md:grid-cols-search-layout': !sideContent,
871
+ 'md:grid-cols-search-layout-with-sidebar': sideContent,
872
+ }), children: [jsxRuntime.jsx("div", { className: sidebarClasses, children: sideContent }), jsxRuntime.jsxs("div", { className: cx('p-0 pt-2 md:p-6 md:pr-0', {
873
+ 'md:pl-0': !sideContent,
874
+ }), children: [jsxRuntime.jsx("div", { className: "flex items-center justify-between", children: bodyHeader }), jsxRuntime.jsx("div", { className: "relative", children: children || bodyContent }), jsxRuntime.jsx("div", { className: "flex items-center justify-around", children: bodyFooter })] })] })] }));
875
+ }
876
+ Layout.displayName = 'Layout';
877
+
878
+ function Results(_a) {
879
+ var children = _a.children, className = _a.className, rest = __rest(_a, ["children", "className"]);
880
+ console.log('Results: rest', rest);
881
+ return (jsxRuntime.jsx("ul", __assign({ className: cx('relative grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-4', className) }, rest, { children: children })));
882
+ }
883
+ Results.displayName = 'Results';
884
+
885
+ /*
886
+ Since Filter Values come in many different varieties, this helper
887
+ encapsulates the logic for determining how to show the label of that
888
+ filter in the UI.
889
+ */
890
+ function getFilterValueDisplay(filterValue) {
891
+ if (filterValue === undefined || filterValue === null)
892
+ return '';
893
+ if (Object.prototype.hasOwnProperty.call(filterValue, 'name'))
894
+ return filterValue.name;
895
+ return String(filterValue);
896
+ }
897
+
898
+ function getFieldType(object, type) {
899
+ if (object)
900
+ return object[type];
901
+ }
902
+ function getRaw(object) {
903
+ return getFieldType(object, 'raw');
904
+ }
905
+ function getSnippet(object) {
906
+ return getFieldType(object, 'snippet');
907
+ }
908
+ function htmlEscape(str) {
909
+ if (!str)
910
+ return '';
911
+ return String(str)
912
+ .replace(/&/g, '&amp;')
913
+ .replace(/"/g, '&quot;')
914
+ .replace(/'/g, '&#39;')
915
+ .replace(/</g, '&lt;')
916
+ .replace(/>/g, '&gt;');
917
+ }
918
+ function getEscapedField(maybeObject) {
919
+ // Fallback to raw values here, because non-string fields
920
+ // will not have a snippet fallback. Raw values MUST be html escaped.
921
+ var safeField = getSnippet(maybeObject) || htmlEscape(getRaw(maybeObject));
922
+ return Array.isArray(safeField) ? safeField.join(', ') : safeField;
923
+ }
924
+
925
+ function Result(_a) {
926
+ var className = _a.className, result = _a.result,
927
+ // onClickLink,
928
+ as = _a.as, _b = _a.cardMap, cardMap = _b === void 0 ? {
929
+ idField: { fieldName: 'uuid' },
930
+ titleField: { fieldName: 'title' },
931
+ descriptionField: { fieldName: 'description' },
932
+ imageField: { fieldName: 'image' },
933
+ } : _b;
934
+ console.log('Result', cardMap);
935
+ // Pass fields into the relevant Card.
936
+ // const fields: any = formatResult(result);
937
+ var idField = cardMap.idField, titleField = cardMap.titleField, imageField = cardMap.imageField, videoField = cardMap.videoField, descriptionField = cardMap.descriptionField, metaDataFields = cardMap.metaDataFields, cardProps = cardMap.cardProps, rest = __rest(cardMap, ["idField", "titleField", "imageField", "videoField", "descriptionField", "metaDataFields", "cardProps"]);
938
+ console.log('rest', rest);
939
+ console.log('cardProps', cardProps);
940
+ var id = idField && getEscapedField(result[idField.fieldName]);
941
+ var title = titleField && getEscapedField(result[titleField.fieldName]);
942
+ var imageUrl = imageField && getEscapedField(result[imageField.fieldName]);
943
+ var videoUrl = videoField && videoField.formatter
944
+ ? videoField.formatter(getEscapedField(result[videoField.fieldName]))
945
+ : videoField && getEscapedField(result[videoField.fieldName]);
946
+ var description = descriptionField && getEscapedField(result[descriptionField.fieldName]);
947
+ var metaData = metaDataFields &&
948
+ metaDataFields.map(function (field) {
949
+ var value = getEscapedField(result[field.fieldName]);
950
+ if (field.formatter && typeof field.formatter === 'function') {
951
+ return field.formatter(value);
952
+ }
953
+ });
954
+ // console.log('Result metaData:', metaData);
955
+ // console.log('Result', cardMap);
956
+ var resultView = function () {
957
+ var imageData = {
958
+ src: imageUrl || '',
959
+ alt: title || '',
960
+ title: title || '',
961
+ width: 500,
962
+ height: 500,
963
+ };
964
+ var cardData = {
965
+ id: id,
966
+ title: title,
967
+ image: imageData,
968
+ video: videoUrl,
969
+ description: description,
970
+ metaData: metaData,
971
+ actions: cardMap.actionsData,
972
+ onClick: cardMap.onClickLink,
973
+ };
974
+ switch (as) {
975
+ case exports.ResultAsTypes.cardMedia:
976
+ return jsxRuntime.jsx(Card, __assign({ variant: exports.CardVariant.MEDIA, data: cardData }, cardProps));
977
+ case exports.ResultAsTypes.cardVideo:
978
+ return jsxRuntime.jsx(Card, __assign({ variant: exports.CardVariant.VIDEO, data: cardData }, cardProps, { isMuted: false }));
979
+ default:
980
+ return jsxRuntime.jsx(Card, __assign({ variant: exports.CardVariant.BASIC, data: cardData }, cardProps));
981
+ }
982
+ };
983
+ return jsxRuntime.jsx("li", { className: cx('relative', className), children: resultView() });
984
+ }
985
+ Result.displayName = 'Result';
986
+
987
+ var connector = new ElasticSearchAPIConnector({
988
+ host: process.env.REACT_ELASTICSEARCH_HOST,
989
+ index: process.env.REACT_ELASTICSEARCH_INDEX || '',
990
+ apiKey: process.env.REACT_ELASTICSEARCH_API_KEY,
991
+ });
992
+ var SORT_OPTIONS = [
993
+ {
994
+ name: 'Relevance',
995
+ value: [],
996
+ },
997
+ {
998
+ name: 'Title',
999
+ value: [
1000
+ {
1001
+ field: 'title.keyword',
1002
+ direction: 'asc',
1003
+ },
1004
+ ],
1005
+ },
1006
+ {
1007
+ name: 'Created',
1008
+ value: [
1009
+ {
1010
+ field: 'created',
1011
+ direction: 'desc',
1012
+ },
1013
+ ],
1014
+ },
1015
+ ];
1016
+ function Search(_a) {
1017
+ var _b = _a.showOptions, showOptions = _b === void 0 ? [10, 25, 50] : _b, _c = _a.resultAs, resultAs = _c === void 0 ? exports.ResultAsTypes.cardBasic : _c, ResultFieldMap = _a.ResultFieldMap, _d = _a.config, config = _d === void 0 ? {
1018
+ filters: [],
1019
+ facets: {},
1020
+ searchFields: {},
1021
+ resultsFields: {},
1022
+ } : _d, _e = _a.facetDisplay, facetDisplay = _e === void 0 ? [] : _e, _f = _a.noSidebar, noSidebar = _f === void 0 ? false : _f;
1023
+ var searchConfig = React.useMemo(function () {
1024
+ return {
1025
+ debug: true,
1026
+ alwaysSearchOnInitialLoad: true,
1027
+ apiConnector: connector,
1028
+ hasA11yNotifications: true,
1029
+ searchQuery: {
1030
+ filters: config.filters || [],
1031
+ search_fields: config.searchFields || {},
1032
+ result_fields: config.resultsFields || {},
1033
+ // disjunctiveFacets: ['created'], // Make certain Facets into OR instead of AND
1034
+ facets: config.facets,
1035
+ },
1036
+ autocompleteQuery: {
1037
+ results: {
1038
+ search_fields: {
1039
+ title: {},
1040
+ description: {},
1041
+ },
1042
+ resultsPerPage: 5,
1043
+ result_fields: {
1044
+ title: {
1045
+ snippet: {
1046
+ size: 100,
1047
+ fallback: true,
1048
+ },
1049
+ },
1050
+ },
1051
+ },
1052
+ // TODO: Implement suggestions
1053
+ // suggestions: {
1054
+ // types: {
1055
+ // documents: {
1056
+ // fields: ['title'],
1057
+ // },
1058
+ // },
1059
+ // size: 4,
1060
+ // },
1061
+ },
1062
+ };
1063
+ }, [config]);
1064
+ return (jsxRuntime.jsx(reactSearchUi.SearchProvider, { config: searchConfig, children: jsxRuntime.jsx(reactSearchUi.WithSearch, { mapContextToProps: function (_a) {
1065
+ var wasSearched = _a.wasSearched;
1066
+ return ({
1067
+ wasSearched: wasSearched,
1068
+ });
1069
+ }, children: function (_a) {
1070
+ var wasSearched = _a.wasSearched;
1071
+ return (jsxRuntime.jsx("div", { className: "App", children: jsxRuntime.jsx(reactSearchUi.ErrorBoundary, { children: jsxRuntime.jsx(Layout, { header: jsxRuntime.jsx(reactSearchUi.SearchBox, { view: SearchBox }), sideContent: !noSidebar && (jsxRuntime.jsxs("div", { children: [wasSearched && jsxRuntime.jsx(reactSearchUi.Sorting, { label: 'Sort by', sortOptions: SORT_OPTIONS, view: Sorting }), facetDisplay.map(function (_a) {
1072
+ var field = _a.field, label = _a.label, view = _a.view;
1073
+ return (jsxRuntime.jsx(reactSearchUi.Facet, { field: field, label: label, view: view }, field));
1074
+ })] })), bodyContent: jsxRuntime.jsx(reactSearchUi.Results, { shouldTrackClickThrough: false, resultView: function (props) { return jsxRuntime.jsx(Result, __assign({}, props, { as: resultAs, cardMap: ResultFieldMap })); }, className: "list-none p-0 m-0", view: Results }), bodyHeader: jsxRuntime.jsxs(React.Fragment, { children: [wasSearched && jsxRuntime.jsx(reactSearchUi.PagingInfo, { view: PagingInfo }), wasSearched && jsxRuntime.jsx(reactSearchUi.ResultsPerPage, { view: ResultsPerPage, options: showOptions })] }), bodyFooter: jsxRuntime.jsx(reactSearchUi.Paging, { view: Paging }), noSidebar: noSidebar }) }) }));
1075
+ } }) }));
1076
+ }
1077
+
1078
+ function SingleSelectFacet(_a) {
1079
+ var className = _a.className, label = _a.label, onChange = _a.onChange, options = _a.options;
1080
+ var selectBoxOptions = options.map(function (option) {
1081
+ return {
1082
+ value: option.value,
1083
+ label: "".concat(option.value, " (").concat(option.count, ")"),
1084
+ };
1085
+ });
1086
+ return (jsxRuntime.jsxs("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: [jsxRuntime.jsx(Label, { className: "text-sm", transform: exports.COPY_TRANSFORM.UPPERCASE, children: label }), jsxRuntime.jsx(FormSelect, { id: label, options: selectBoxOptions, onChange: function (o) { return onChange(o.target.value); } })] }));
1087
+ }
1088
+ SingleSelectFacet.displayName = 'SingleSelectFacet';
1089
+
1090
+ function SingleLinksFacet(_a) {
1091
+ var className = _a.className, label = _a.label, onRemove = _a.onRemove, onSelect = _a.onSelect, options = _a.options;
1092
+ var value = options.filter(function (o) { return o.selected; }).map(function (o) { return o.value; })[0];
1093
+ return (jsxRuntime.jsx("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx(Label, { className: "text-sm", transform: exports.COPY_TRANSFORM.UPPERCASE, children: label }), jsxRuntime.jsxs("ul", { className: "ul list-none p-0", children: [value && (jsxRuntime.jsxs("li", { className: "m-0 flex justify-between items-center flex-1", children: [getFilterValueDisplay(value), jsxRuntime.jsx("span", { className: "ml-1 px-1", children: jsxRuntime.jsx(Button, { onClick: function () { return onRemove(value); }, children: jsxRuntime.jsx(Icon, { name: "mdi:close" }) }) })] })), !value &&
1094
+ options.map(function (option) {
1095
+ var filterValue = getFilterValueDisplay(option.value);
1096
+ return (jsxRuntime.jsxs("li", { className: "m-0 flex justify-between", children: [jsxRuntime.jsx("a", { className: "no-underline text-sm visited:text-body-text", "data-transaction-name": "facet - ".concat(label), href: "/", onClick: function (e) {
1097
+ e.preventDefault();
1098
+ onSelect(option.value);
1099
+ }, children: jsxRuntime.jsx("label", { className: "label pl-0 leading-none text-sm", children: filterValue }) }), jsxRuntime.jsx(Copy, { as: exports.COPY_TAG.SPAN, size: exports.COPY_SIZE.SMALL, children: option.count.toLocaleString('en') })] }, filterValue));
1100
+ })] })] }) }));
1101
+ }
1102
+ SingleLinksFacet.displayName = 'SingleLinksFacet';
1103
+
1104
+ function MultiCheckboxFacet(_a) {
1105
+ var className = _a.className, label = _a.label, onMoreClick = _a.onMoreClick, onRemove = _a.onRemove, onSelect = _a.onSelect, options = _a.options, showMore = _a.showMore, showSearch = _a.showSearch, onSearch = _a.onSearch, searchPlaceholder = _a.searchPlaceholder;
1106
+ if (!options) {
1107
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Options required" });
1108
+ }
1109
+ return (jsxRuntime.jsxs("fieldset", { className: cx('m-0 p-0 mt-4 mb-2 border-none', className), children: [jsxRuntime.jsx(Label, { className: "text-sm", transform: exports.COPY_TRANSFORM.UPPERCASE, children: label }), showSearch && (jsxRuntime.jsx("div", { className: "mt-1", children: jsxRuntime.jsx(TextInput, { type: InputType.SEARCH, placeholder: searchPlaceholder || 'Search', onChange: function (e) {
1110
+ onSearch(e.target.value);
1111
+ } }) })), jsxRuntime.jsxs("div", { className: "my-4", children: [(options === null || options === void 0 ? void 0 : options.length) < 1 && jsxRuntime.jsx("div", { children: "No matching options" }), options === null || options === void 0 ? void 0 : options.map(function (option) {
1112
+ var checked = option.selected;
1113
+ var value = option.value;
1114
+ var filterDisplayValue = getFilterValueDisplay(value);
1115
+ return (jsxRuntime.jsxs("div", { className: "flex justify-between pb-2", children: [jsxRuntime.jsx(Checkbox, { id: "facet_".concat(label).concat(filterDisplayValue), "data-transaction-name": "facet - ".concat(label), checked: checked, onChange: function () { return (checked ? onRemove(value) : onSelect(value)); }, label: filterDisplayValue }), jsxRuntime.jsx(Copy, { as: exports.COPY_TAG.SPAN, size: exports.COPY_SIZE.SMALL, children: option.count.toLocaleString('en') })] }, filterDisplayValue));
1116
+ })] }), showMore && (jsxRuntime.jsx(Button, { size: exports.BTN_SIZES.SMALL, variant: exports.BTN_VARIANTS.TERTIARY, onClick: onMoreClick, "aria-label": "Show more options", children: "+ More" }))] }));
1117
+ }
1118
+ MultiCheckboxFacet.displayName = 'MultiCheckboxFacet';
1119
+
799
1120
  exports.Blockquote = Blockquote;
800
1121
  exports.Button = Button;
801
1122
  exports.Card = Card;
@@ -813,4 +1134,8 @@ exports.Link = Link;
813
1134
  exports.List = List;
814
1135
  exports.ListItem = ListItem;
815
1136
  exports.Loader = Loader;
1137
+ exports.MultiCheckboxFacet = MultiCheckboxFacet;
816
1138
  exports.Notice = Notice;
1139
+ exports.Search = Search;
1140
+ exports.SingleLinksFacet = SingleLinksFacet;
1141
+ exports.SingleSelectFacet = SingleSelectFacet;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Props } from './Form.types';
3
3
  declare const Form: {
4
- ({ children, className, submit, onSubmit, onChange, hideSubmit, ariaSubmitLabel, submitID, submitVariant, initialValues, isBoxed, submitType, disabledSubmitWithReturn, }: Props): React.ReactElement;
4
+ ({ children, className, submit, onSubmit, onChange, hideSubmit, ariaSubmitLabel, submitID, submitVariant, initialValues, isBoxed, submitType, disabledSubmitWithReturn, isDisabled, }: Props): React.ReactElement;
5
5
  displayName: string;
6
6
  };
7
7
  export default Form;
@@ -29,5 +29,8 @@ export interface Props {
29
29
  isBoxed?: boolean;
30
30
  /** The submit button type. */
31
31
  submitType?: BTN_TYPES.SUBMIT | BTN_TYPES.BUTTON;
32
+ /** Disable submit button with return key. */
32
33
  disabledSubmitWithReturn?: boolean;
34
+ /** Disable the form submit button. */
35
+ isDisabled?: boolean;
33
36
  }
@@ -0,0 +1,6 @@
1
+ export { default as Search } from './Search';
2
+ export { default as SingleSelectFacet } from './Search/views/SingleSelectFacet';
3
+ export { default as SingleLinksFacet } from './Search/views/SingleLinksFacet';
4
+ export { default as MultiCheckboxFacet } from './Search/views/MultiCheckboxFacet';
5
+ export { ResultAsTypes } from './Search/Search.types';
6
+ export type { Props as SearchProps } from './Search/Search.types';
@@ -1 +1,2 @@
1
1
  export * from './components';
2
+ export * from './features';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4alldigital/foundation-ui--gamma",
3
- "version": "1.31.7",
3
+ "version": "1.31.9",
4
4
  "description": "Foundation UI Component library with GAMMA theme. ",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -25,7 +25,7 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "gitHead": "e417e292c98e15ed7050342a41ac6dd36736850d",
28
+ "gitHead": "083c395c88f6c7d474e094b4ce8d1b9fdf5774d7",
29
29
  "dependencies": {
30
30
  "@elastic/datemath": "^5.0.3",
31
31
  "@elastic/eui": "^94.1.0",