@embeddable.com/remarkable-ui 0.1.34 → 0.1.35

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.
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as i } from "@embeddable.com/react";
2
2
  import { d as r, z as s, t as d, c as u, ad as m, V as t, o as c } from "./component.constants-D59iJ42U.js";
3
- import { M as p, a as f } from "./index-Bh33sXJ4.js";
3
+ import { M as p, a as f } from "./index-Ba7NiFTr.js";
4
4
  const g = {
5
5
  name: "MultiSelectFieldPro",
6
6
  label: "Multi Select Field",
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "components": [
3
- "ComparisonPeriodSelectFieldPro",
4
- "DateRangeSelectFieldPro",
5
- "BarChartDefaultHorizontalPro",
6
3
  "MultiSelectFieldPro",
7
4
  "SingleSelectFieldPro",
8
- "BarChartDefaultPro",
9
- "BarChartGroupedPro",
10
- "BarChartStackedHorizontalPro",
11
5
  "KpiChartNumberPro",
12
- "BarChartGroupedHorizontalPro",
6
+ "LineChartGroupedPro",
7
+ "BarChartGroupedPro",
8
+ "ComparisonPeriodSelectFieldPro",
9
+ "LineChartDefaultPro",
13
10
  "KpiChartNumberComparisonPro",
14
- "BarChartStackedPro",
15
11
  "DonutLabelChartPro",
12
+ "BarChartDefaultPro",
13
+ "BarChartStackedHorizontalPro",
14
+ "BarChartDefaultHorizontalPro",
15
+ "BarChartGroupedHorizontalPro",
16
16
  "PieChartPro",
17
- "LineChartGroupedPro",
17
+ "DateRangeSelectFieldPro",
18
18
  "DonutChartPro",
19
- "LineChartDefaultPro",
20
19
  "LineChartComparisonDefaultPro",
20
+ "BarChartStackedPro",
21
21
  "TableChartPaginated"
22
22
  ],
23
23
  "editors": [],
@@ -1,22 +1,22 @@
1
- import { ac as I, j as t, ae as V, ag as w, af as z, ao as U, ar as J, as as K, ap as C, aq as X, an as G, r as H, U as Q } from "./component.constants-D59iJ42U.js";
1
+ import { ac as L, j as t, ae as V, ag as w, af as z, ao as U, ar as J, as as K, ap as N, aq as X, an as G, r as H, U as Q } from "./component.constants-D59iJ42U.js";
2
2
  import { g as W } from "./formatter.utils-DDLdrAl9.js";
3
3
  import { useTheme as Y } from "@embeddable.com/react";
4
4
  import { u as Z, d as ee, I as te, S as se, E as le } from "./EditorCard-B7s7sQ-B.js";
5
- import { useState as T, useRef as ae, useEffect as N, useMemo as ne } from "react";
5
+ import { useState as T, useRef as ae, useEffect as B, useMemo as ne } from "react";
6
6
  /**
7
7
  * @license @tabler/icons-react v3.35.0 - MIT
8
8
  *
9
9
  * This source code is licensed under the MIT license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */
12
- const oe = [["path", { d: "M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z", key: "svg-0" }]], ce = I("outline", "square", "Square", oe);
12
+ const oe = [["path", { d: "M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z", key: "svg-0" }]], ce = L("outline", "square", "Square", oe);
13
13
  /**
14
14
  * @license @tabler/icons-react v3.35.0 - MIT
15
15
  *
16
16
  * This source code is licensed under the MIT license.
17
17
  * See the LICENSE file in the root directory of this source tree.
18
18
  */
19
- const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z", key: "svg-0" }]], re = I("filled", "square-check-filled", "SquareCheckFilled", ie), ue = "_icon_14m1u_1", me = "_buttonMedium_14m1u_6", de = "_buttonSmall_14m1u_14", be = "_buttonText_14m1u_22", pe = "_buttonTextMedium_14m1u_26", xe = "_buttonTextSmall_14m1u_35", b = {
19
+ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z", key: "svg-0" }]], re = L("filled", "square-check-filled", "SquareCheckFilled", ie), ue = "_icon_14m1u_1", me = "_buttonMedium_14m1u_6", de = "_buttonSmall_14m1u_14", be = "_buttonText_14m1u_22", pe = "_buttonTextMedium_14m1u_26", xe = "_buttonTextSmall_14m1u_35", b = {
20
20
  icon: ue,
21
21
  buttonMedium: me,
22
22
  buttonSmall: de,
@@ -53,7 +53,7 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
53
53
  n && /* @__PURE__ */ t.jsx(n, { className: b.icon })
54
54
  ]
55
55
  }
56
- ), he = "_submitButton_gpe2a_1", fe = "_selectField_gpe2a_5", B = {
56
+ ), he = "_submitButton_gpe2a_1", fe = "_selectField_gpe2a_5", I = {
57
57
  submitButton: he,
58
58
  selectField: fe
59
59
  }, je = ({
@@ -71,10 +71,10 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
71
71
  error: p = !1,
72
72
  errorMessage: x
73
73
  }) => {
74
- const [S, _] = T(!1), [h, i] = T(""), [r, v] = T(s), [L, M] = T(""), O = ae(null);
75
- Z(S, O), N(() => {
74
+ const [S, _] = T(!1), [h, i] = T(""), [r, v] = T(s), [k, M] = T(""), O = ae(null);
75
+ Z(S, O), B(() => {
76
76
  v(s);
77
- }, [JSON.stringify(s)]), N(() => {
77
+ }, [JSON.stringify(s)]), B(() => {
78
78
  if (n)
79
79
  return;
80
80
  if (!s || s.length === 0) {
@@ -92,7 +92,7 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
92
92
  M(`(${e.length}) ${a}`);
93
93
  }
94
94
  }, [s, o, n]);
95
- const F = ne(() => l ? ee(l) : void 0, [l]), k = d && !l ? o.filter((e) => e.label.toLowerCase().includes(h.toLowerCase())) : o, q = r.every((e) => s.includes(e)) && s.every((e) => r.includes(e)), P = (e, a) => {
95
+ const F = ne(() => l ? ee(l) : void 0, [l]), C = d && !l ? o.filter((e) => e.label.toLowerCase().includes(h.toLowerCase())) : o, q = r.every((e) => s.includes(e)) && s.every((e) => r.includes(e)), P = (e, a) => {
96
96
  e.preventDefault(), a && (r.includes(a) ? v(r.filter((g) => g !== a)) : v([...r, a]));
97
97
  }, D = (e) => {
98
98
  i(e), F == null || F(e);
@@ -101,7 +101,7 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
101
101
  }, $ = () => {
102
102
  i(""), l == null || l(""), j([]);
103
103
  }, A = p || !!x;
104
- return /* @__PURE__ */ t.jsxs("div", { className: B.selectField, children: [
104
+ return /* @__PURE__ */ t.jsxs("div", { className: I.selectField, children: [
105
105
  /* @__PURE__ */ t.jsx(
106
106
  U,
107
107
  {
@@ -114,7 +114,7 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
114
114
  "aria-label": "Select options",
115
115
  placeholder: f,
116
116
  disabled: u,
117
- valueLabel: L,
117
+ valueLabel: k,
118
118
  onClear: $,
119
119
  isClearable: m,
120
120
  isLoading: n,
@@ -136,8 +136,8 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
136
136
  }
137
137
  ),
138
138
  /* @__PURE__ */ t.jsxs(se, { disabled: n, children: [
139
- k.map((e) => /* @__PURE__ */ t.jsx(
140
- C,
139
+ C.map((e) => /* @__PURE__ */ t.jsx(
140
+ N,
141
141
  {
142
142
  onClick: (a) => P(a, e.value),
143
143
  startIcon: r.includes(e.value) ? /* @__PURE__ */ t.jsx(re, {}) : /* @__PURE__ */ t.jsx(ce, {}),
@@ -145,12 +145,12 @@ const ie = [["path", { d: "M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.
145
145
  },
146
146
  (e == null ? void 0 : e.value) ?? e.label
147
147
  )),
148
- c && /* @__PURE__ */ t.jsx(C, { disabled: !0, value: "empty", label: c })
148
+ c && C.length === 0 && /* @__PURE__ */ t.jsx(N, { disabled: !0, value: "empty", label: c })
149
149
  ] }),
150
150
  /* @__PURE__ */ t.jsx(
151
151
  _e,
152
152
  {
153
- className: B.submitButton,
153
+ className: I.submitButton,
154
154
  disabled: q || n,
155
155
  variant: "primary",
156
156
  size: "medium",
@@ -206,4 +206,4 @@ export {
206
206
  je as b,
207
207
  Oe as i
208
208
  };
209
- //# sourceMappingURL=index-Bh33sXJ4.js.map
209
+ //# sourceMappingURL=index-Ba7NiFTr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Ba7NiFTr.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconSquareCheckFilled.mjs","../src/remarkable-ui/shared/Button/Button.tsx","../src/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.tsx","../src/remarkable-pro/components/editors/MultiSelectFieldPro/index.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z\", \"key\": \"svg-0\" }]];\nconst IconSquare = createReactComponent(\"outline\", \"square\", \"Square\", __iconNode);\n\nexport { __iconNode, IconSquare as default };\n//# sourceMappingURL=IconSquare.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\", \"key\": \"svg-0\" }]];\nconst IconSquareCheckFilled = createReactComponent(\"filled\", \"square-check-filled\", \"SquareCheckFilled\", __iconNode);\n\nexport { __iconNode, IconSquareCheckFilled as default };\n//# sourceMappingURL=IconSquareCheckFilled.mjs.map\n","import { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport { BaseButton, type BaseButtonProps } from '../BaseButton';\nimport { Typography } from '../Typography/Typography';\nimport clsx from 'clsx';\n\ntype ButtonProps = BaseButtonProps & {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n children: string;\n size: 'small' | 'medium';\n};\n\nexport const Button: React.FC<ButtonProps> = ({\n variant,\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n size,\n ...props\n}) => {\n return (\n <BaseButton\n variant={variant}\n {...props}\n className={size === 'medium' ? styles.buttonMedium : styles.buttonSmall}\n size={size}\n >\n {StartIcon && <StartIcon className={styles.icon} />}\n <Typography\n as=\"span\"\n className={clsx(\n styles.buttonText,\n styles[`buttonText${size.charAt(0).toUpperCase() + size.slice(1)}`],\n )}\n >\n {children}\n </Typography>\n {EndIcon && <EndIcon className={styles.icon} />}\n </BaseButton>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport { IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './MultiSelectField.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type MultiSelectFieldProps = {\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: SelectListOptionProps[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && displayOptions.length === 0 && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n","import { DataResponse, Dimension } from '@embeddable.com/core';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../theme/theme.types';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { resolveI18nProps } from '../../component.utils';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { MultiSelectField } from '../../../../remarkable-ui';\n\nexport const MAX_OPTIONS = 200;\n\ntype MultiSelectFieldProProps = {\n title?: string;\n description?: string;\n dimension: Dimension;\n optionalSecondDimension?: Dimension;\n placeholder?: string;\n results: DataResponse;\n selectedValues: string[];\n maxOptions?: number;\n setSearchValue: (search: string) => void;\n onChange?: (newValues: string[]) => void;\n};\n\nconst MultiSelectFieldPro = (props: MultiSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const themeFormatter = getThemeFormatter(theme);\n const {\n title,\n description,\n dimension,\n optionalSecondDimension,\n placeholder,\n results,\n selectedValues,\n setSearchValue,\n onChange,\n } = resolveI18nProps(props);\n\n const options =\n results.data?.map((data) => {\n return {\n value: optionalSecondDimension ? data[optionalSecondDimension.name] : data[dimension.name],\n label: themeFormatter.data(dimension, data[dimension.name]),\n };\n }) ?? [];\n\n const showNoOptionsMessage = Boolean(!results.isLoading && (results.data?.length ?? 0) === 0);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <MultiSelectField\n isClearable\n isSearchable\n isLoading={results.isLoading}\n values={selectedValues ?? []}\n options={options}\n placeholder={placeholder}\n noOptionsMessage={showNoOptionsMessage ? i18n.t('common.noOptionsFound') : undefined}\n onChange={(newValues) => onChange?.(newValues)}\n onSearch={setSearchValue}\n />\n </EditorCard>\n );\n};\n\nexport default MultiSelectFieldPro;\n"],"names":["__iconNode","IconSquare","createReactComponent","IconSquareCheckFilled","Button","variant","StartIcon","EndIcon","children","size","props","jsxs","BaseButton","styles","jsx","Typography","clsx","MultiSelectField","disabled","isClearable","isLoading","isSearchable","noOptionsMessage","options","placeholder","submitLabel","values","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","preValues","setPreValues","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","selectedOptions","value","_a","o","newLabel","debouncedSearch","useMemo","debounce","displayOptions","option","isSubmitDisabled","preValue","handleSelectOption","newValue","v","handleSearch","newSearch","handleSave","newValues","handleClearAll","hasError","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","SelectListOption","e","FieldErrorMessage","MAX_OPTIONS","MultiSelectFieldPro","theme","useTheme","themeFormatter","getThemeFormatter","title","description","dimension","optionalSecondDimension","results","selectedValues","resolveI18nProps","data","showNoOptionsMessage","_b","EditorCard","i18n"],"mappings":"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","x_google_ignoreList":[0,1]}
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@ import { j as s, ae as v, af as u, ag as _, ah as S, ai as I, aj as N, ak as T,
3
3
  import { am as _s, au as fs, ao as Cs, an as gs, a0 as ys, at as js, av as ws, aq as vs, ar as Ss, ap as Is, a4 as Ns, a5 as Ts, ax as $s, as as Ps, T as ks, d as As, aw as Ls, c as Bs, z as Ms, aJ as Ds, ab as Fs, W as Rs, b as zs, aI as Os, a7 as Ws, aK as Es, Y as Ks, Z as qs, aa as Gs, X as Hs, F as Vs, C as Xs, a6 as Us, U as Ys, i as Js, a3 as Zs, A as Qs, w as sa, a as aa, ad as ea, r as ta, p as na, h as oa, s as ia, g as ra, e as ca, aL as la, B as ua, f as ma, aE as ha, a9 as da, a1 as xa, aD as ba, aF as pa, aC as _a, aA as fa, aG as Ca, aB as ga, ay as ya, az as ja, a8 as wa, aH as va, t as Sa, x as Ia, v as Na, l as Ta, k as $a, y as Pa, n as ka, u as Aa, q as La } from "./component.constants-D59iJ42U.js";
4
4
  import { useRef as P, useState as k, useEffect as A } from "react";
5
5
  import { E as Ma, S as Da } from "./EditorCard-B7s7sQ-B.js";
6
- import { B as g } from "./index-Bh33sXJ4.js";
7
- import { b as Ra, i as za } from "./index-Bh33sXJ4.js";
6
+ import { B as g } from "./index-Ba7NiFTr.js";
7
+ import { b as Ra, i as za } from "./index-Ba7NiFTr.js";
8
8
  import { S as Wa } from "./SingleSelectField-DXVRxF0n.js";
9
9
  import { K as Ka } from "./KpiChart-PRQV9-IW.js";
10
10
  import { r as Ga, s as Ha } from "./charts.utils-BFYHGiMZ.js";
@@ -7,6 +7,7 @@ type Story = StoryObj<typeof meta>;
7
7
  export declare const Empty: Story;
8
8
  export declare const Filled: Story;
9
9
  export declare const Disabled: Story;
10
+ export declare const NoOptions: Story;
10
11
  export declare const WithState: Story;
11
12
  export declare const WithError: Story;
12
13
  export declare const WithErrorAndValue: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectField.stories.d.ts","sourceRoot":"","sources":["../../../../../src/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAKhE,QAAA,MAAM,IAAI;;CAE+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAenC,eAAO,MAAM,KAAK,EAAE,KAOnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAOpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAmBvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC"}
1
+ {"version":3,"file":"MultiSelectField.stories.d.ts","sourceRoot":"","sources":["../../../../../src/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAKhE,QAAA,MAAM,IAAI;;CAE+B,CAAC;AAE1C,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAenC,eAAO,MAAM,KAAK,EAAE,KAOnB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAOpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAmBvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAU/B,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@embeddable.com/remarkable-ui",
3
3
  "author": "embeddable (https://embeddable.com)",
4
- "version": "0.1.34",
4
+ "version": "0.1.35",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Bh33sXJ4.js","sources":["../node_modules/@tabler/icons-react/dist/esm/icons/IconSquare.mjs","../node_modules/@tabler/icons-react/dist/esm/icons/IconSquareCheckFilled.mjs","../src/remarkable-ui/shared/Button/Button.tsx","../src/remarkable-ui/editors/select/MultiSelectField/MultiSelectField.tsx","../src/remarkable-pro/components/editors/MultiSelectFieldPro/index.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z\", \"key\": \"svg-0\" }]];\nconst IconSquare = createReactComponent(\"outline\", \"square\", \"Square\", __iconNode);\n\nexport { __iconNode, IconSquare as default };\n//# sourceMappingURL=IconSquare.mjs.map\n","/**\n * @license @tabler/icons-react v3.35.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M18.333 2c1.96 0 3.56 1.537 3.662 3.472l.005 .195v12.666c0 1.96 -1.537 3.56 -3.472 3.662l-.195 .005h-12.666a3.667 3.667 0 0 1 -3.662 -3.472l-.005 -.195v-12.666c0 -1.96 1.537 -3.56 3.472 -3.662l.195 -.005h12.666zm-2.626 7.293a1 1 0 0 0 -1.414 0l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.32 1.497l2 2l.094 .083a1 1 0 0 0 1.32 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\", \"key\": \"svg-0\" }]];\nconst IconSquareCheckFilled = createReactComponent(\"filled\", \"square-check-filled\", \"SquareCheckFilled\", __iconNode);\n\nexport { __iconNode, IconSquareCheckFilled as default };\n//# sourceMappingURL=IconSquareCheckFilled.mjs.map\n","import { TablerIcon } from '@tabler/icons-react';\nimport styles from './Button.module.css';\nimport { BaseButton, type BaseButtonProps } from '../BaseButton';\nimport { Typography } from '../Typography/Typography';\nimport clsx from 'clsx';\n\ntype ButtonProps = BaseButtonProps & {\n startIcon?: TablerIcon;\n endIcon?: TablerIcon;\n children: string;\n size: 'small' | 'medium';\n};\n\nexport const Button: React.FC<ButtonProps> = ({\n variant,\n startIcon: StartIcon,\n endIcon: EndIcon,\n children,\n size,\n ...props\n}) => {\n return (\n <BaseButton\n variant={variant}\n {...props}\n className={size === 'medium' ? styles.buttonMedium : styles.buttonSmall}\n size={size}\n >\n {StartIcon && <StartIcon className={styles.icon} />}\n <Typography\n as=\"span\"\n className={clsx(\n styles.buttonText,\n styles[`buttonText${size.charAt(0).toUpperCase() + size.slice(1)}`],\n )}\n >\n {children}\n </Typography>\n {EndIcon && <EndIcon className={styles.icon} />}\n </BaseButton>\n );\n};\n","import { FC, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n SelectListOption,\n SelectListOptionProps,\n} from '../shared/SelectList/SelectListOptions/SelectListOption/SelectListOption';\nimport { debounce } from '../../../utils/debounce.utils';\nimport { Dropdown } from '../../../shared/Dropdown/Dropdown';\nimport { SelectButton } from '../shared/SelectButton/SelectButton';\nimport { SelectList } from '../shared/SelectList/SelectList';\nimport { TextField } from '../../TextField/TextField';\nimport { SelectListOptions } from '../shared/SelectList/SelectListOptions/SelectListOptions';\nimport { IconSearch, IconSquare, IconSquareCheckFilled } from '@tabler/icons-react';\nimport { Button } from '../../../shared/Button/Button';\nimport styles from './MultiSelectField.module.css';\nimport { useSelectSearchFocus } from '../shared/useSelectSearchFocus.hook';\nimport { FieldErrorMessage } from '../../../shared/FieldErrorMessage/FieldErrorMessage';\n\nexport type MultiSelectFieldProps = {\n disabled?: boolean;\n isClearable?: boolean;\n isLoading?: boolean;\n isSearchable?: boolean;\n noOptionsMessage?: string;\n options: SelectListOptionProps[];\n placeholder?: string;\n submitLabel?: string;\n values?: string[];\n onChange: (value: string[]) => void;\n onSearch?: (search: string) => void;\n error?: boolean;\n errorMessage?: string;\n};\n\nexport const MultiSelectField: FC<MultiSelectFieldProps> = ({\n disabled,\n isClearable,\n isLoading,\n isSearchable,\n noOptionsMessage,\n options,\n placeholder,\n submitLabel = 'Apply',\n values = [],\n onChange,\n onSearch,\n error = false,\n errorMessage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchValue, setSearchValue] = useState<string>('');\n const [preValues, setPreValues] = useState<string[]>(values);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n\n const searchFieldRef = useRef<HTMLInputElement>(null);\n useSelectSearchFocus(isOpen, searchFieldRef);\n\n useEffect(() => {\n setPreValues(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(values)]);\n\n useEffect(() => {\n if (isLoading) {\n return;\n }\n\n if (!values || values.length === 0) {\n setSelectedLabel('');\n return;\n }\n const selectedOptions = values.map(\n (value) => options.find((o) => o.value === value)?.label ?? value,\n );\n\n if (selectedOptions.length > 0) {\n const newLabel = selectedOptions.join(', ');\n setSelectedLabel(`(${selectedOptions.length}) ${newLabel}`);\n }\n }, [values, options, isLoading]);\n\n const debouncedSearch = useMemo(() => (onSearch ? debounce(onSearch) : undefined), [onSearch]);\n\n const displayOptions =\n isSearchable && !onSearch\n ? options.filter((option) => option.label.toLowerCase().includes(searchValue.toLowerCase()))\n : options;\n\n const isSubmitDisabled =\n preValues.every((preValue) => values.includes(preValue)) &&\n values.every((value) => preValues.includes(value));\n\n const handleSelectOption = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n newValue?: string,\n ) => {\n e.preventDefault();\n\n if (!newValue) return;\n\n if (preValues.includes(newValue)) {\n setPreValues(preValues.filter((v) => v !== newValue));\n } else {\n setPreValues([...preValues, newValue]);\n }\n };\n\n const handleSearch = (newSearch: string) => {\n setSearchValue(newSearch);\n debouncedSearch?.(newSearch);\n };\n\n const handleSave = (newValues: string[]) => {\n onChange(newValues);\n setIsOpen(false);\n setSearchValue('');\n onSearch?.('');\n };\n\n const handleClearAll = () => {\n setSearchValue('');\n onSearch?.('');\n onChange([]);\n };\n\n const hasError = error || !!errorMessage;\n\n return (\n <div className={styles.selectField}>\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n disabled={disabled}\n triggerComponent={\n <SelectButton\n aria-label=\"Select options\"\n placeholder={placeholder}\n disabled={disabled}\n valueLabel={selectedLabel}\n onClear={handleClearAll}\n isClearable={isClearable}\n isLoading={isLoading}\n error={hasError}\n />\n }\n >\n <SelectList>\n {isSearchable && (\n <TextField\n ref={searchFieldRef}\n startIcon={IconSearch}\n aria-label=\"Search options\"\n placeholder=\"Search…\"\n role=\"searchbox\"\n value={searchValue}\n onKeyDown={(e) => e.stopPropagation()}\n onChange={handleSearch}\n />\n )}\n <SelectListOptions disabled={isLoading}>\n {displayOptions.map((option) => (\n <SelectListOption\n key={option?.value ?? option.label}\n onClick={(e) => handleSelectOption(e, option.value)}\n startIcon={\n preValues.includes(option.value!) ? <IconSquareCheckFilled /> : <IconSquare />\n }\n {...option}\n />\n ))}\n {noOptionsMessage && (\n <SelectListOption disabled value=\"empty\" label={noOptionsMessage} />\n )}\n </SelectListOptions>\n <Button\n className={styles.submitButton}\n disabled={isSubmitDisabled || isLoading}\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleSave(preValues)}\n role=\"button\"\n >\n {submitLabel}\n </Button>\n </SelectList>\n </Dropdown>\n {errorMessage && <FieldErrorMessage message={errorMessage} />}\n </div>\n );\n};\n","import { DataResponse, Dimension } from '@embeddable.com/core';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { useTheme } from '@embeddable.com/react';\nimport { Theme } from '../../../theme/theme.types';\nimport { EditorCard } from '../shared/EditorCard/EditorCard';\nimport { resolveI18nProps } from '../../component.utils';\nimport { i18n } from '../../../theme/i18n/i18n';\nimport { MultiSelectField } from '../../../../remarkable-ui';\n\nexport const MAX_OPTIONS = 200;\n\ntype MultiSelectFieldProProps = {\n title?: string;\n description?: string;\n dimension: Dimension;\n optionalSecondDimension?: Dimension;\n placeholder?: string;\n results: DataResponse;\n selectedValues: string[];\n maxOptions?: number;\n setSearchValue: (search: string) => void;\n onChange?: (newValues: string[]) => void;\n};\n\nconst MultiSelectFieldPro = (props: MultiSelectFieldProProps) => {\n const theme: Theme = useTheme() as Theme;\n const themeFormatter = getThemeFormatter(theme);\n const {\n title,\n description,\n dimension,\n optionalSecondDimension,\n placeholder,\n results,\n selectedValues,\n setSearchValue,\n onChange,\n } = resolveI18nProps(props);\n\n const options =\n results.data?.map((data) => {\n return {\n value: optionalSecondDimension ? data[optionalSecondDimension.name] : data[dimension.name],\n label: themeFormatter.data(dimension, data[dimension.name]),\n };\n }) ?? [];\n\n const showNoOptionsMessage = Boolean(!results.isLoading && (results.data?.length ?? 0) === 0);\n\n return (\n <EditorCard title={title} subtitle={description}>\n <MultiSelectField\n isClearable\n isSearchable\n isLoading={results.isLoading}\n values={selectedValues ?? []}\n options={options}\n placeholder={placeholder}\n noOptionsMessage={showNoOptionsMessage ? i18n.t('common.noOptionsFound') : undefined}\n onChange={(newValues) => onChange?.(newValues)}\n onSearch={setSearchValue}\n />\n </EditorCard>\n );\n};\n\nexport default MultiSelectFieldPro;\n"],"names":["__iconNode","IconSquare","createReactComponent","IconSquareCheckFilled","Button","variant","StartIcon","EndIcon","children","size","props","jsxs","BaseButton","styles","jsx","Typography","clsx","MultiSelectField","disabled","isClearable","isLoading","isSearchable","noOptionsMessage","options","placeholder","submitLabel","values","onChange","onSearch","error","errorMessage","isOpen","setIsOpen","useState","searchValue","setSearchValue","preValues","setPreValues","selectedLabel","setSelectedLabel","searchFieldRef","useRef","useSelectSearchFocus","useEffect","selectedOptions","value","_a","o","newLabel","debouncedSearch","useMemo","debounce","displayOptions","option","isSubmitDisabled","preValue","handleSelectOption","newValue","v","handleSearch","newSearch","handleSave","newValues","handleClearAll","hasError","Dropdown","SelectButton","SelectList","TextField","IconSearch","SelectListOptions","SelectListOption","e","FieldErrorMessage","MAX_OPTIONS","MultiSelectFieldPro","theme","useTheme","themeFormatter","getThemeFormatter","title","description","dimension","optionalSecondDimension","results","selectedValues","resolveI18nProps","data","showNoOptionsMessage","_b","EditorCard","i18n"],"mappings":"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","x_google_ignoreList":[0,1]}