jb-select 5.3.2 → 6.0.1
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/README.md +67 -29
- package/dist/index.cjs.js +2 -0
- package/dist/index.cjs.js.br +0 -0
- package/dist/index.cjs.js.gz +0 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.br +0 -0
- package/dist/index.umd.js.gz +0 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/web-component/jb-select/lib/index.d.ts +7 -0
- package/dist/web-component/jb-select/lib/jb-option/jb-option.d.ts +21 -0
- package/dist/web-component/jb-select/lib/jb-option/render.d.ts +1 -0
- package/dist/web-component/jb-select/lib/jb-option/types.d.ts +4 -0
- package/dist/web-component/jb-select/lib/jb-option-list/jb-option-list.d.ts +10 -0
- package/dist/web-component/jb-select/lib/jb-option-list/types.d.ts +5 -0
- package/dist/web-component/jb-select/lib/jb-select.d.ts +3 -7
- package/dist/web-component/jb-select/lib/types.d.ts +6 -10
- package/index.js +2 -2
- package/lib/index.ts +8 -0
- package/lib/jb-option/jb-option.scss +23 -0
- package/lib/jb-option/jb-option.ts +136 -0
- package/lib/jb-option/render.ts +9 -0
- package/lib/jb-option/types.ts +4 -0
- package/lib/jb-option-list/jb-option-list.ts +125 -0
- package/lib/jb-option-list/types.ts +5 -0
- package/lib/jb-select.html +1 -1
- package/lib/jb-select.scss +36 -45
- package/lib/jb-select.ts +176 -239
- package/lib/types.ts +8 -9
- package/package.json +5 -3
- package/react/README.md +188 -0
- package/react/dist/common/hooks/use-event.d.ts +3 -0
- package/react/dist/common/hooks/useLazyRef.d.ts +4 -0
- package/react/dist/common/hooks/useMobx.d.ts +4 -0
- package/react/dist/common/scripts/device-detection.d.ts +1 -0
- package/react/dist/common/scripts/persian-helper.d.ts +3 -0
- package/react/dist/index.cjs.js +122 -0
- package/react/dist/index.cjs.js.map +1 -0
- package/react/dist/index.js +118 -0
- package/react/dist/index.js.map +1 -0
- package/react/dist/index.umd.js +125 -0
- package/react/dist/index.umd.js.map +1 -0
- package/react/dist/web-component/jb-select/react/lib/JBOption.d.ts +19 -0
- package/react/dist/web-component/jb-select/react/lib/JBOptionList.d.ts +22 -0
- package/react/dist/web-component/jb-select/react/lib/JBSelect.d.ts +38 -0
- package/react/dist/web-component/jb-select/react/lib/index.d.ts +3 -0
- package/react/index.js +1 -0
- package/react/lib/JBOption.tsx +45 -0
- package/react/lib/JBOptionList.tsx +59 -0
- package/react/lib/JBSelect.tsx +105 -0
- package/react/lib/index.tsx +3 -0
- package/react/package.json +33 -0
- package/react/tsconfig.json +19 -0
- package/dist/jb-select.cjs.js +0 -2
- package/dist/jb-select.cjs.js.br +0 -0
- package/dist/jb-select.cjs.js.gz +0 -0
- package/dist/jb-select.cjs.js.map +0 -1
- package/dist/jb-select.js +0 -2
- package/dist/jb-select.js.br +0 -0
- package/dist/jb-select.js.gz +0 -0
- package/dist/jb-select.js.map +0 -1
- package/dist/jb-select.umd.js +0 -2
- package/dist/jb-select.umd.js.br +0 -0
- package/dist/jb-select.umd.js.gz +0 -0
- package/dist/jb-select.umd.js.map +0 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('jb-select')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', 'jb-select'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.index = {}, global.React));
|
|
5
|
+
})(this, (function (exports, React) { 'use strict';
|
|
6
|
+
|
|
7
|
+
/* eslint-disable react/display-name */
|
|
8
|
+
const JBOptionList = React.forwardRef((props, ref) => {
|
|
9
|
+
const element = React.useRef(null);
|
|
10
|
+
React.useImperativeHandle(ref, () => (element ? element.current : undefined), [element]);
|
|
11
|
+
React.useEffect(() => {
|
|
12
|
+
if (element.current && Array.isArray(props.optionList)) {
|
|
13
|
+
element.current.optionList = props.optionList;
|
|
14
|
+
}
|
|
15
|
+
}, [props.optionList, element]);
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (element.current && typeof props.getTitle == "function") {
|
|
18
|
+
element.current.setCallback("getTitle", props.getTitle);
|
|
19
|
+
}
|
|
20
|
+
}, [props.getTitle, element]);
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
if (element.current && typeof props.getValue == "function") {
|
|
23
|
+
element.current.setCallback("getValue", props.getValue);
|
|
24
|
+
}
|
|
25
|
+
}, [props.getValue, element]);
|
|
26
|
+
React.useEffect(() => {
|
|
27
|
+
if (element.current && typeof props.getContentDOM == "function") {
|
|
28
|
+
element.current.setCallback("getContentDOM", props.getContentDOM);
|
|
29
|
+
}
|
|
30
|
+
}, [props.getContentDOM, element]);
|
|
31
|
+
return (React.createElement("jb-option-list", { ref: element }));
|
|
32
|
+
});
|
|
33
|
+
JBOptionList.displayName = 'JBOptionList';
|
|
34
|
+
|
|
35
|
+
function useBindEvent(ref, event, handler, passive = false) {
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
const dom = ref.current;
|
|
38
|
+
if (dom) {
|
|
39
|
+
// initiate the event handler
|
|
40
|
+
dom.addEventListener(event, handler, passive);
|
|
41
|
+
}
|
|
42
|
+
// this will clean up the event every time the component is re-rendered
|
|
43
|
+
return function cleanup() {
|
|
44
|
+
if (dom) {
|
|
45
|
+
dom.removeEventListener(event, handler, passive);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}, [ref, event, handler, passive]);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* eslint-disable react/display-name */
|
|
52
|
+
const JBSelect = React.forwardRef((props, ref) => {
|
|
53
|
+
const element = React.useRef(null);
|
|
54
|
+
const [refChangeCount, refChangeCountSetter] = React.useState(0);
|
|
55
|
+
React.useImperativeHandle(ref, () => (element ? element.current : {}), [element]);
|
|
56
|
+
React.useEffect(() => {
|
|
57
|
+
refChangeCountSetter(refChangeCount + 1);
|
|
58
|
+
}, [element.current]);
|
|
59
|
+
React.useEffect(() => {
|
|
60
|
+
if (element.current) {
|
|
61
|
+
element.current.value = props.value;
|
|
62
|
+
}
|
|
63
|
+
}, [props.value]);
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
if (typeof props.getSelectedValueDOM == "function" && element.current && element.current) {
|
|
66
|
+
element.current.callbacks.getSelectedValueDOM = props.getSelectedValueDOM;
|
|
67
|
+
}
|
|
68
|
+
}, [props.getSelectedValueDOM]);
|
|
69
|
+
React.useEffect(() => {
|
|
70
|
+
if (props.message !== null && props.message !== undefined) {
|
|
71
|
+
element.current?.setAttribute("message", props.message);
|
|
72
|
+
}
|
|
73
|
+
}, [props.message]);
|
|
74
|
+
React.useEffect(() => {
|
|
75
|
+
if (props.placeholder !== null && props.placeholder !== undefined) {
|
|
76
|
+
element.current?.setAttribute("placeholder", props.placeholder);
|
|
77
|
+
}
|
|
78
|
+
}, [props.placeholder]);
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
if (props.searchPlaceholder !== null && props.searchPlaceholder !== undefined) {
|
|
81
|
+
element.current?.setAttribute("search-placeholder", props.searchPlaceholder);
|
|
82
|
+
}
|
|
83
|
+
}, [props.searchPlaceholder]);
|
|
84
|
+
function onKeyup(e) {
|
|
85
|
+
if (typeof props.onKeyup == "function") {
|
|
86
|
+
props.onKeyup(e);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function onChange(e) {
|
|
90
|
+
if (typeof props.onChange == "function") {
|
|
91
|
+
props.onChange(e);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function onInput(e) {
|
|
95
|
+
if (typeof props.onInput == "function") {
|
|
96
|
+
props.onInput(e);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
useBindEvent(element, 'keyup', onKeyup);
|
|
100
|
+
useBindEvent(element, 'change', onChange);
|
|
101
|
+
useBindEvent(element, 'input', onInput);
|
|
102
|
+
return (React.createElement("jb-select", { style: props.style ? props.style : undefined, class: props.className ? props.className : "", label: props.label, ref: element, required: props.required || 'false', name: props.name ?? undefined }, props.children));
|
|
103
|
+
});
|
|
104
|
+
JBSelect.displayName = 'JBSelect';
|
|
105
|
+
|
|
106
|
+
/* eslint-disable react/display-name */
|
|
107
|
+
const JBOption = React.forwardRef((props, ref) => {
|
|
108
|
+
const element = React.useRef(null);
|
|
109
|
+
const { value, children, className, ...rest } = props;
|
|
110
|
+
React.useImperativeHandle(ref, () => (element ? element.current : undefined), [element]);
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
if (element.current && value !== undefined) {
|
|
113
|
+
element.current.value = value;
|
|
114
|
+
}
|
|
115
|
+
}, [value, element]);
|
|
116
|
+
return (React.createElement("jb-option", { class: className, ref: element, ...rest }, children));
|
|
117
|
+
});
|
|
118
|
+
JBOption.displayName = 'JBOption';
|
|
119
|
+
|
|
120
|
+
exports.JBOption = JBOption;
|
|
121
|
+
exports.JBOptionList = JBOptionList;
|
|
122
|
+
exports.JBSelect = JBSelect;
|
|
123
|
+
|
|
124
|
+
}));
|
|
125
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../lib/JBOptionList.tsx","../../../../common/hooks/use-event.ts","../lib/JBSelect.tsx","../lib/JBOption.tsx"],"sourcesContent":["/* eslint-disable react/display-name */\r\nimport React, { useEffect, useRef, useImperativeHandle } from 'react';\r\n// eslint-disable-next-line no-duplicate-imports\r\nimport { JBOptionListWebComponent } from 'jb-select';\r\ntype TOption = any;\r\ntype TValue = any;\r\n\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/no-namespace\r\n namespace JSX {\r\n interface IntrinsicElements {\r\n 'jb-option-list': JBOptionListType;\r\n }\r\n interface JBOptionListType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionListWebComponent<TOption, TValue>>, JBOptionListWebComponent<TOption, TValue>> {\r\n class?: string,\r\n // ref:React.RefObject<JBDateInputWebComponent>,\r\n }\r\n }\r\n}\r\nexport const JBOptionList = React.forwardRef((props: JBOptionListProps<TOption,TValue>, ref) => {\r\n const element = useRef<JBOptionListWebComponent<TOption, TValue>>(null);\r\n useImperativeHandle(\r\n ref,\r\n () => (element ? element.current : undefined),\r\n [element],\r\n );\r\n useEffect(() => {\r\n if (element.current && Array.isArray(props.optionList)) {\r\n element.current.optionList = props.optionList;\r\n }\r\n }, [props.optionList, element]);\r\n useEffect(() => {\r\n if (element.current && typeof props.getTitle == \"function\") {\r\n element.current.setCallback(\"getTitle\",props.getTitle);\r\n }\r\n }, [props.getTitle, element]);\r\n useEffect(() => {\r\n if (element.current && typeof props.getValue == \"function\") {\r\n element.current.setCallback(\"getValue\",props.getValue);\r\n }\r\n }, [props.getValue, element]);\r\n useEffect(() => {\r\n if (element.current && typeof props.getContentDOM == \"function\") {\r\n element.current.setCallback(\"getContentDOM\",props.getContentDOM);\r\n }\r\n }, [props.getContentDOM, element]);\r\n return (\r\n <jb-option-list ref={element}>\r\n </jb-option-list>\r\n );\r\n});\r\n\r\nexport type JBOptionListProps<TOption,TValue> = {\r\n optionList: TOption[],\r\n getTitle?: (option: TOption) => string,\r\n getValue?: (option: TOption) => TValue,\r\n getContentDOM?: (option: TOption) => HTMLElement,\r\n}\r\nJBOptionList.displayName = 'JBOptionList';","import { useEffect } from \"react\";\r\n\r\nexport function useEvent(dom:HTMLElement, event:any, handler:any, passive = false) {\r\n useEffect(() => {\r\n if (dom) {\r\n // initiate the event handler\r\n dom.addEventListener(event, handler, passive); \r\n }\r\n // this will clean up the event every time the component is re-rendered\r\n return function cleanup() {\r\n if(dom){\r\n dom.removeEventListener(event, handler, passive);\r\n }\r\n };\r\n });\r\n}\r\nexport function useBindEvent<TRef extends React.MutableRefObject<any|null>,TEvent>(ref:TRef, event:string, handler:(e:TEvent)=>void, passive = false) {\r\n useEffect(() => {\r\n const dom = ref.current;\r\n if (dom) {\r\n // initiate the event handler\r\n dom.addEventListener(event, handler, passive); \r\n }\r\n // this will clean up the event every time the component is re-rendered\r\n return function cleanup() {\r\n if(dom){\r\n dom.removeEventListener(event, handler, passive);\r\n }\r\n };\r\n },[ref,event,handler,passive]);\r\n}","/* eslint-disable react/display-name */\r\nimport React, { useEffect, useRef, useState, useImperativeHandle,CSSProperties } from 'react';\r\nimport 'jb-select';\r\nimport { useBindEvent } from '../../../../common/hooks/use-event.js';\r\n// eslint-disable-next-line no-duplicate-imports\r\nimport { JBSelectWebComponent } from 'jb-select';\r\nexport type JBSelectEventType<T> = T & {\r\n target: JBSelectWebComponent\r\n}\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/no-namespace\r\n namespace JSX {\r\n interface IntrinsicElements {\r\n 'jb-select': JBSelectType;\r\n }\r\n interface JBSelectType extends React.DetailedHTMLProps<React.HTMLAttributes<JBSelectWebComponent>, JBSelectWebComponent> {\r\n class?:string,\r\n label?: string,\r\n name?:string,\r\n required?:string | boolean,\r\n message?:string,\r\n tabindex?:string,\r\n // ref:React.RefObject<JBDateInputWebComponent>,\r\n }\r\n }\r\n}\r\n\r\nexport const JBSelect = React.forwardRef((props:JBSelectProps, ref) => {\r\n const element = useRef<JBSelectWebComponent>(null);\r\n const [refChangeCount, refChangeCountSetter] = useState(0);\r\n useImperativeHandle(\r\n ref,\r\n () => (element ? element.current : {}),\r\n [element],\r\n );\r\n useEffect(() => {\r\n refChangeCountSetter(refChangeCount + 1);\r\n }, [element.current]);\r\n useEffect(() => {\r\n if(element.current){\r\n element.current.value = props.value;\r\n }\r\n }, [props.value]);\r\n useEffect(() => {\r\n if (typeof props.getSelectedValueDOM == \"function\" && element.current && element.current) {\r\n element.current.callbacks.getSelectedValueDOM = props.getSelectedValueDOM;\r\n }\r\n }, [props.getSelectedValueDOM]);\r\n useEffect(() => {\r\n if (props.message !== null && props.message !== undefined ) {\r\n element.current?.setAttribute(\"message\", props.message);\r\n }\r\n }, [props.message]);\r\n useEffect(() => {\r\n if (props.placeholder !== null && props.placeholder !== undefined) {\r\n element.current?.setAttribute(\"placeholder\", props.placeholder);\r\n }\r\n }, [props.placeholder]);\r\n useEffect(() => {\r\n if (props.searchPlaceholder !== null && props.searchPlaceholder !== undefined) {\r\n element.current?.setAttribute(\"search-placeholder\", props.searchPlaceholder);\r\n }\r\n }, [props.searchPlaceholder]);\r\n function onKeyup(e:JBSelectEventType<KeyboardEvent>) {\r\n if ( typeof props.onKeyup == \"function\") {\r\n props.onKeyup(e);\r\n }\r\n }\r\n function onChange(e:JBSelectEventType<Event>) {\r\n if (typeof props.onChange ==\"function\") {\r\n props.onChange(e);\r\n }\r\n }\r\n function onInput(e:JBSelectEventType<InputEvent>) {\r\n if (typeof props.onInput == \"function\") {\r\n props.onInput(e);\r\n }\r\n }\r\n useBindEvent(element, 'keyup', onKeyup);\r\n useBindEvent(element, 'change', onChange);\r\n useBindEvent(element, 'input', onInput);\r\n return (\r\n <jb-select style={props.style?props.style:undefined} class={props.className?props.className:\"\"} label={props.label} ref={element} required={props.required || 'false'} name={props.name??undefined}>\r\n {props.children}\r\n </jb-select>\r\n );\r\n});\r\n\r\nexport type JBSelectProps = {\r\n style?:CSSProperties,\r\n label?: string,\r\n getSelectedValueDOM?: (option:any)=>HTMLElement,\r\n value?: any,\r\n onChange?: (e:JBSelectEventType<Event>)=>void,\r\n onKeyup?: (e:JBSelectEventType<KeyboardEvent>)=>void,\r\n onInput?: (e:JBSelectEventType<InputEvent>)=>void,\r\n required?: boolean,\r\n message?: string,\r\n placeholder?: string,\r\n searchPlaceholder?: string,\r\n className?: string,\r\n children?:React.ReactNode,\r\n name?:string\r\n}\r\nJBSelect.displayName = 'JBSelect';","/* eslint-disable react/display-name */\r\nimport React, { useEffect, useRef, useImperativeHandle, PropsWithChildren, ComponentProps } from 'react';\r\nimport { JBOptionWebComponent } from 'jb-select';\r\n//TODO: make it generic when remove forward ref\r\ntype TValue = any;\r\n\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/no-namespace\r\n namespace JSX {\r\n interface IntrinsicElements {\r\n 'jb-option': JBOptionType;\r\n }\r\n interface JBOptionType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionWebComponent<TValue>>, JBOptionWebComponent<TValue>> {\r\n class?: string,\r\n }\r\n }\r\n}\r\nexport const JBOption = React.forwardRef((props: JBOptionProps<TValue>, ref) => {\r\n const element = useRef<JBOptionWebComponent<TValue>>(null);\r\n const {value,children,className, ...rest} = props;\r\n useImperativeHandle(\r\n ref,\r\n () => (element ? element.current : undefined),\r\n [element],\r\n );\r\n \r\n useEffect(() => {\r\n if (element.current && value !== undefined) {\r\n element.current.value = value;\r\n }\r\n }, [value, element]);\r\n\r\n return (\r\n <jb-option class={className} ref={element} {...rest}>\r\n {children}\r\n </jb-option>\r\n );\r\n});\r\n\r\ntype Props<TValue> = {\r\n value:TValue\r\n}\r\n\r\nexport type JBOptionProps<TValue> = PropsWithChildren<JSX.JBOptionType & Props<TValue>>\r\nJBOption.displayName = 'JBOption';"],"names":["useRef","useImperativeHandle","useEffect","useState"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { PropsWithChildren } from 'react';
|
|
2
|
+
import { JBOptionWebComponent } from 'jb-select';
|
|
3
|
+
type TValue = any;
|
|
4
|
+
declare global {
|
|
5
|
+
namespace JSX {
|
|
6
|
+
interface IntrinsicElements {
|
|
7
|
+
'jb-option': JBOptionType;
|
|
8
|
+
}
|
|
9
|
+
interface JBOptionType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionWebComponent<TValue>>, JBOptionWebComponent<TValue>> {
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export declare const JBOption: React.ForwardRefExoticComponent<Omit<JBOptionProps<any>, "ref"> & React.RefAttributes<unknown>>;
|
|
15
|
+
type Props<TValue> = {
|
|
16
|
+
value: TValue;
|
|
17
|
+
};
|
|
18
|
+
export type JBOptionProps<TValue> = PropsWithChildren<JSX.JBOptionType & Props<TValue>>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { JBOptionListWebComponent } from 'jb-select';
|
|
3
|
+
type TOption = any;
|
|
4
|
+
type TValue = any;
|
|
5
|
+
declare global {
|
|
6
|
+
namespace JSX {
|
|
7
|
+
interface IntrinsicElements {
|
|
8
|
+
'jb-option-list': JBOptionListType;
|
|
9
|
+
}
|
|
10
|
+
interface JBOptionListType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionListWebComponent<TOption, TValue>>, JBOptionListWebComponent<TOption, TValue>> {
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export declare const JBOptionList: React.ForwardRefExoticComponent<JBOptionListProps<any, any> & React.RefAttributes<unknown>>;
|
|
16
|
+
export type JBOptionListProps<TOption, TValue> = {
|
|
17
|
+
optionList: TOption[];
|
|
18
|
+
getTitle?: (option: TOption) => string;
|
|
19
|
+
getValue?: (option: TOption) => TValue;
|
|
20
|
+
getContentDOM?: (option: TOption) => HTMLElement;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { CSSProperties } from 'react';
|
|
2
|
+
import 'jb-select';
|
|
3
|
+
import { JBSelectWebComponent } from 'jb-select';
|
|
4
|
+
export type JBSelectEventType<T> = T & {
|
|
5
|
+
target: JBSelectWebComponent;
|
|
6
|
+
};
|
|
7
|
+
declare global {
|
|
8
|
+
namespace JSX {
|
|
9
|
+
interface IntrinsicElements {
|
|
10
|
+
'jb-select': JBSelectType;
|
|
11
|
+
}
|
|
12
|
+
interface JBSelectType extends React.DetailedHTMLProps<React.HTMLAttributes<JBSelectWebComponent>, JBSelectWebComponent> {
|
|
13
|
+
class?: string;
|
|
14
|
+
label?: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
required?: string | boolean;
|
|
17
|
+
message?: string;
|
|
18
|
+
tabindex?: string;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export declare const JBSelect: React.ForwardRefExoticComponent<JBSelectProps & React.RefAttributes<unknown>>;
|
|
23
|
+
export type JBSelectProps = {
|
|
24
|
+
style?: CSSProperties;
|
|
25
|
+
label?: string;
|
|
26
|
+
getSelectedValueDOM?: (option: any) => HTMLElement;
|
|
27
|
+
value?: any;
|
|
28
|
+
onChange?: (e: JBSelectEventType<Event>) => void;
|
|
29
|
+
onKeyup?: (e: JBSelectEventType<KeyboardEvent>) => void;
|
|
30
|
+
onInput?: (e: JBSelectEventType<InputEvent>) => void;
|
|
31
|
+
required?: boolean;
|
|
32
|
+
message?: string;
|
|
33
|
+
placeholder?: string;
|
|
34
|
+
searchPlaceholder?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
children?: React.ReactNode;
|
|
37
|
+
name?: string;
|
|
38
|
+
};
|
package/react/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dist/index.js';
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* eslint-disable react/display-name */
|
|
2
|
+
import React, { useEffect, useRef, useImperativeHandle, PropsWithChildren, ComponentProps } from 'react';
|
|
3
|
+
import { JBOptionWebComponent } from 'jb-select';
|
|
4
|
+
//TODO: make it generic when remove forward ref
|
|
5
|
+
type TValue = any;
|
|
6
|
+
|
|
7
|
+
declare global {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
9
|
+
namespace JSX {
|
|
10
|
+
interface IntrinsicElements {
|
|
11
|
+
'jb-option': JBOptionType;
|
|
12
|
+
}
|
|
13
|
+
interface JBOptionType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionWebComponent<TValue>>, JBOptionWebComponent<TValue>> {
|
|
14
|
+
class?: string,
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const JBOption = React.forwardRef((props: JBOptionProps<TValue>, ref) => {
|
|
19
|
+
const element = useRef<JBOptionWebComponent<TValue>>(null);
|
|
20
|
+
const {value,children,className, ...rest} = props;
|
|
21
|
+
useImperativeHandle(
|
|
22
|
+
ref,
|
|
23
|
+
() => (element ? element.current : undefined),
|
|
24
|
+
[element],
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (element.current && value !== undefined) {
|
|
29
|
+
element.current.value = value;
|
|
30
|
+
}
|
|
31
|
+
}, [value, element]);
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<jb-option class={className} ref={element} {...rest}>
|
|
35
|
+
{children}
|
|
36
|
+
</jb-option>
|
|
37
|
+
);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
type Props<TValue> = {
|
|
41
|
+
value:TValue
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type JBOptionProps<TValue> = PropsWithChildren<JSX.JBOptionType & Props<TValue>>
|
|
45
|
+
JBOption.displayName = 'JBOption';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* eslint-disable react/display-name */
|
|
2
|
+
import React, { useEffect, useRef, useImperativeHandle } from 'react';
|
|
3
|
+
// eslint-disable-next-line no-duplicate-imports
|
|
4
|
+
import { JBOptionListWebComponent } from 'jb-select';
|
|
5
|
+
type TOption = any;
|
|
6
|
+
type TValue = any;
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
10
|
+
namespace JSX {
|
|
11
|
+
interface IntrinsicElements {
|
|
12
|
+
'jb-option-list': JBOptionListType;
|
|
13
|
+
}
|
|
14
|
+
interface JBOptionListType extends React.DetailedHTMLProps<React.HTMLAttributes<JBOptionListWebComponent<TOption, TValue>>, JBOptionListWebComponent<TOption, TValue>> {
|
|
15
|
+
class?: string,
|
|
16
|
+
// ref:React.RefObject<JBDateInputWebComponent>,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const JBOptionList = React.forwardRef((props: JBOptionListProps<TOption,TValue>, ref) => {
|
|
21
|
+
const element = useRef<JBOptionListWebComponent<TOption, TValue>>(null);
|
|
22
|
+
useImperativeHandle(
|
|
23
|
+
ref,
|
|
24
|
+
() => (element ? element.current : undefined),
|
|
25
|
+
[element],
|
|
26
|
+
);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (element.current && Array.isArray(props.optionList)) {
|
|
29
|
+
element.current.optionList = props.optionList;
|
|
30
|
+
}
|
|
31
|
+
}, [props.optionList, element]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (element.current && typeof props.getTitle == "function") {
|
|
34
|
+
element.current.setCallback("getTitle",props.getTitle);
|
|
35
|
+
}
|
|
36
|
+
}, [props.getTitle, element]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (element.current && typeof props.getValue == "function") {
|
|
39
|
+
element.current.setCallback("getValue",props.getValue);
|
|
40
|
+
}
|
|
41
|
+
}, [props.getValue, element]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (element.current && typeof props.getContentDOM == "function") {
|
|
44
|
+
element.current.setCallback("getContentDOM",props.getContentDOM);
|
|
45
|
+
}
|
|
46
|
+
}, [props.getContentDOM, element]);
|
|
47
|
+
return (
|
|
48
|
+
<jb-option-list ref={element}>
|
|
49
|
+
</jb-option-list>
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export type JBOptionListProps<TOption,TValue> = {
|
|
54
|
+
optionList: TOption[],
|
|
55
|
+
getTitle?: (option: TOption) => string,
|
|
56
|
+
getValue?: (option: TOption) => TValue,
|
|
57
|
+
getContentDOM?: (option: TOption) => HTMLElement,
|
|
58
|
+
}
|
|
59
|
+
JBOptionList.displayName = 'JBOptionList';
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* eslint-disable react/display-name */
|
|
2
|
+
import React, { useEffect, useRef, useState, useImperativeHandle,CSSProperties } from 'react';
|
|
3
|
+
import 'jb-select';
|
|
4
|
+
import { useBindEvent } from '../../../../common/hooks/use-event.js';
|
|
5
|
+
// eslint-disable-next-line no-duplicate-imports
|
|
6
|
+
import { JBSelectWebComponent } from 'jb-select';
|
|
7
|
+
export type JBSelectEventType<T> = T & {
|
|
8
|
+
target: JBSelectWebComponent
|
|
9
|
+
}
|
|
10
|
+
declare global {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
12
|
+
namespace JSX {
|
|
13
|
+
interface IntrinsicElements {
|
|
14
|
+
'jb-select': JBSelectType;
|
|
15
|
+
}
|
|
16
|
+
interface JBSelectType extends React.DetailedHTMLProps<React.HTMLAttributes<JBSelectWebComponent>, JBSelectWebComponent> {
|
|
17
|
+
class?:string,
|
|
18
|
+
label?: string,
|
|
19
|
+
name?:string,
|
|
20
|
+
required?:string | boolean,
|
|
21
|
+
message?:string,
|
|
22
|
+
tabindex?:string,
|
|
23
|
+
// ref:React.RefObject<JBDateInputWebComponent>,
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const JBSelect = React.forwardRef((props:JBSelectProps, ref) => {
|
|
29
|
+
const element = useRef<JBSelectWebComponent>(null);
|
|
30
|
+
const [refChangeCount, refChangeCountSetter] = useState(0);
|
|
31
|
+
useImperativeHandle(
|
|
32
|
+
ref,
|
|
33
|
+
() => (element ? element.current : {}),
|
|
34
|
+
[element],
|
|
35
|
+
);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
refChangeCountSetter(refChangeCount + 1);
|
|
38
|
+
}, [element.current]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if(element.current){
|
|
41
|
+
element.current.value = props.value;
|
|
42
|
+
}
|
|
43
|
+
}, [props.value]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (typeof props.getSelectedValueDOM == "function" && element.current && element.current) {
|
|
46
|
+
element.current.callbacks.getSelectedValueDOM = props.getSelectedValueDOM;
|
|
47
|
+
}
|
|
48
|
+
}, [props.getSelectedValueDOM]);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (props.message !== null && props.message !== undefined ) {
|
|
51
|
+
element.current?.setAttribute("message", props.message);
|
|
52
|
+
}
|
|
53
|
+
}, [props.message]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (props.placeholder !== null && props.placeholder !== undefined) {
|
|
56
|
+
element.current?.setAttribute("placeholder", props.placeholder);
|
|
57
|
+
}
|
|
58
|
+
}, [props.placeholder]);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (props.searchPlaceholder !== null && props.searchPlaceholder !== undefined) {
|
|
61
|
+
element.current?.setAttribute("search-placeholder", props.searchPlaceholder);
|
|
62
|
+
}
|
|
63
|
+
}, [props.searchPlaceholder]);
|
|
64
|
+
function onKeyup(e:JBSelectEventType<KeyboardEvent>) {
|
|
65
|
+
if ( typeof props.onKeyup == "function") {
|
|
66
|
+
props.onKeyup(e);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function onChange(e:JBSelectEventType<Event>) {
|
|
70
|
+
if (typeof props.onChange =="function") {
|
|
71
|
+
props.onChange(e);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function onInput(e:JBSelectEventType<InputEvent>) {
|
|
75
|
+
if (typeof props.onInput == "function") {
|
|
76
|
+
props.onInput(e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
useBindEvent(element, 'keyup', onKeyup);
|
|
80
|
+
useBindEvent(element, 'change', onChange);
|
|
81
|
+
useBindEvent(element, 'input', onInput);
|
|
82
|
+
return (
|
|
83
|
+
<jb-select style={props.style?props.style:undefined} class={props.className?props.className:""} label={props.label} ref={element} required={props.required || 'false'} name={props.name??undefined}>
|
|
84
|
+
{props.children}
|
|
85
|
+
</jb-select>
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
export type JBSelectProps = {
|
|
90
|
+
style?:CSSProperties,
|
|
91
|
+
label?: string,
|
|
92
|
+
getSelectedValueDOM?: (option:any)=>HTMLElement,
|
|
93
|
+
value?: any,
|
|
94
|
+
onChange?: (e:JBSelectEventType<Event>)=>void,
|
|
95
|
+
onKeyup?: (e:JBSelectEventType<KeyboardEvent>)=>void,
|
|
96
|
+
onInput?: (e:JBSelectEventType<InputEvent>)=>void,
|
|
97
|
+
required?: boolean,
|
|
98
|
+
message?: string,
|
|
99
|
+
placeholder?: string,
|
|
100
|
+
searchPlaceholder?: string,
|
|
101
|
+
className?: string,
|
|
102
|
+
children?:React.ReactNode,
|
|
103
|
+
name?:string
|
|
104
|
+
}
|
|
105
|
+
JBSelect.displayName = 'JBSelect';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jb-select-react",
|
|
3
|
+
"description": "select react component",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "mohammad javad bathaei",
|
|
7
|
+
"email": "javadbat@gmail.com"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"jb",
|
|
11
|
+
"jb-select",
|
|
12
|
+
"select",
|
|
13
|
+
"react component"
|
|
14
|
+
],
|
|
15
|
+
"version": "6.0.1",
|
|
16
|
+
"bugs": "https://github.com/javadbat/jb-select/issues",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"files": [
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"README.md",
|
|
21
|
+
"lib/",
|
|
22
|
+
"dist/"
|
|
23
|
+
],
|
|
24
|
+
"main": "index.js",
|
|
25
|
+
"types": "./dist/web-component/jb-select/react/lib/index.d.ts",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git@github.com:javadbat/jb-select.git"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"jb-select": ">=5.0.0"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
},
|
|
5
|
+
"include": [
|
|
6
|
+
"../../../common/scripts/**/*.ts",
|
|
7
|
+
"../../../common/hooks/**/*.ts",
|
|
8
|
+
"../../../common/hooks/**/*.js",
|
|
9
|
+
"lib/**/*.ts",
|
|
10
|
+
"lib/**/*.tsx",
|
|
11
|
+
"lib/JBOptionList.tsx"
|
|
12
|
+
],
|
|
13
|
+
"exclude": [
|
|
14
|
+
"node_modules",
|
|
15
|
+
"**/*.spec.ts",
|
|
16
|
+
"dist",
|
|
17
|
+
],
|
|
18
|
+
"extends":"../../tsconfig-react.json"
|
|
19
|
+
}
|
package/dist/jb-select.cjs.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("jb-validation");function t(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)}function n(e,t,n,i,s){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?s.call(e,n):s?s.value=n:t.set(e,n),n}"function"==typeof SuppressedError&&SuppressedError;var i,s,l,o,r,a,c,d,h,b,p,m,u,v,f,w,g,x,y,j,k,L,E,V,C,M,T,O,z,W,S,A,K,q,D,H,P,B,I,R,N,Z,F,J,U,Y,$,_,G,Q,X;class ee extends HTMLElement{static get formAssociated(){return!0}get value(){return t(this,s,"f")?t(this,i,"m",$).call(this,t(this,s,"f")):null}set value(e){t(this,i,"m",k).call(this,e)}get textValue(){return t(this,l,"f")}set textValue(e){n(this,l,e,"f"),this.elements.input.value=e,t(this,i,"m",H).call(this,e)}get selectedOptionTitle(){return this.value?t(this,i,"m",_).call(this,t(this,s,"f")):""}get optionList(){return t(this,r,"f")||[]}set optionList(e){Array.isArray(e)?(n(this,r,e,"f"),this.displayOptionList=t(this,i,"m",Z).call(this,this.textValue),t(this,i,"m",j).call(this)):console.error("your provided option list to jb-select is not a array. you must provide array value",{value:e})}get placeholder(){return t(this,c,"f")}set placeholder(e){n(this,c,e,"f"),null!==this.value&&void 0!==this.value?this.elements.input.placeholder="":this.elements.input.placeholder=e}get searchPlaceholder(){return t(this,d,"f")}set searchPlaceholder(e){n(this,d,e,"f")}get displayOptionList(){return t(this,a,"f")}set displayOptionList(e){Array.isArray(e)&&0==e.length?this.elements.emptyListPlaceholder.classList.add("--show"):Array.isArray(e)&&this.elements.emptyListPlaceholder.classList.remove("--show"),n(this,a,e,"f"),t(this,i,"m",P).call(this)}get isMobileDevice(){return/Mobi/i.test(window.navigator.userAgent)}get isOpen(){return this.elements.componentWrapper.classList.contains("--focused")}get validation(){return t(this,b,"f")}get disabled(){return t(this,p,"f")}set disabled(e){n(this,p,e,"f"),this.elements.input.disabled=e,e?t(this,u,"f").states?.add("disabled"):t(this,u,"f").states?.delete("disabled")}set required(e){n(this,m,e,"f"),t(this,b,"f").checkValiditySync({showError:!1})}get required(){return t(this,m,"f")}get isAutoValidationDisabled(){return""===this.getAttribute("disable-auto-validation")||"true"===this.getAttribute("disable-auto-validation")}get name(){return this.getAttribute("name")||""}get isDirty(){return this.value!==this.initialValue}constructor(){super(),i.add(this),s.set(this,void 0),l.set(this,""),o.set(this,null),this.callbacks={getOptionTitle:e=>"string"==typeof e||"number"==typeof e?e.toString():(console.error("title must be string please provide a valid getOptionTitle","provided title:",e),"NOT SUPPORTED TITLE TYPE"),getOptionValue:null,getOptionDOM:null,getSelectedValueDOM:null},r.set(this,[]),a.set(this,[]),c.set(this,""),d.set(this,"search"),b.set(this,new e.ValidationHelper({clearValidationError:this.clearValidationError.bind(this),showValidationError:this.showValidationError.bind(this),getValue:()=>t(this,i,"a",h),getValidations:t(this,i,"m",G).bind(this),getValueString:()=>t(this,l,"f"),setValidationResult:t(this,i,"m",X).bind(this)})),p.set(this,!1),m.set(this,!1),u.set(this,void 0),this.initialValue=null,"function"==typeof this.attachInternals&&n(this,u,this.attachInternals(),"f"),t(this,i,"m",w).call(this),t(this,i,"m",x).call(this)}connectedCallback(){t(this,i,"m",f).call(this),t(this,i,"m",v).call(this)}static get observedAttributes(){return["label","message","value","required","placeholder","search-placeholder"]}attributeChangedCallback(e,n,s){t(this,i,"m",y).call(this,e,s)}focus(){this.elements.input.focus(),t(this,i,"m",q).call(this),this.elements.componentWrapper.classList.add("--focused"),this.isMobileDevice&&(this.elements.input.placeholder=t(this,d,"f"))}blur(){this.elements.componentWrapper.classList.remove("--focused"),this.textValue="",t(this,i,"m",z).call(this,""),t(this,i,"m",D).call(this),t(this,b,"f").checkValidity({showError:!0}),this.isMobileDevice&&(this.value?this.elements.input.placeholder="":this.elements.input.placeholder=this.placeholder),this.elements.input.blur()}showValidationError(e){const t="string"==typeof e?e:e.message;this.elements.messageBox.innerHTML=t,this.elements.messageBox.classList.add("--error")}clearValidationError(){this.elements.messageBox.innerHTML=this.getAttribute("message")||"",this.elements.messageBox.classList.remove("--error")}checkValidity(){const e=t(this,b,"f").checkValiditySync({showError:!1});if(!e.isAllValid){const e=new CustomEvent("invalid");this.dispatchEvent(e)}return e.isAllValid}reportValidity(){const e=t(this,b,"f").checkValiditySync({showError:!0});if(!e.isAllValid){const e=new CustomEvent("invalid");this.dispatchEvent(e)}return e.isAllValid}get validationMessage(){return t(this,u,"f")?.validationMessage||t(this,b,"f").resultSummary.message}}s=new WeakMap,l=new WeakMap,o=new WeakMap,r=new WeakMap,a=new WeakMap,c=new WeakMap,d=new WeakMap,b=new WeakMap,p=new WeakMap,m=new WeakMap,u=new WeakMap,i=new WeakSet,h=function(){return{inputtedText:t(this,l,"f"),selectedOption:t(this,s,"f"),value:this.value}},v=function(){const e=new CustomEvent("init",{bubbles:!0,composed:!0});this.dispatchEvent(e)},f=function(){const e=new CustomEvent("load",{bubbles:!0,composed:!0});this.dispatchEvent(e)},w=function(){const e=this.attachShadow({mode:"open",delegatesFocus:!0}),n=document.createElement("template");n.innerHTML='<style>:host {\n --p-middle-div-height: var(--jb-select-middle-div-height, 0px);\n --p-p-color: #1e2832;\n --p-border-bottom-width: var(--jb-select-border-bottom-width, var(--jb-select-border-width, 3px));\n --p-base-z-index: 1;\n --p-mobile-modal-z-index: 900;\n --p-mobile-modal-height:var(--jb-select-mobile-modal-height, 100vh);\n}\n\n.jb-select-web-component {\n width: var(--jb-select-width, 100%);\n margin: var(--jb-select-margin, 0 0);\n position: relative;\n box-sizing: border-box;\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused {\n position: fixed;\n bottom: 0;\n top: initial;\n left: 0;\n background-color: var(--jb-select-overlay-bgcolor, rgba(0, 0, 0, 0.5333333333));\n width: 100vw;\n height: var(--p-mobile-modal-height);\n border-radius: var(--jb-select-mobile-modal-border-radius, 0) var(--jb-select-mobile-modal-border-radius, 0) 0 0;\n margin: 0;\n padding: 16px 8px;\n z-index: var(--p-mobile-modal-z-index);\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .select-box {\n height: var(--jb-select-mobile-search-input-height, var(--jb-select-height, 40px));\n background-color: var(--jb-select-mobile-input-bgcolor, #f7f6f6);\n border-width: var(--jb-select-mobile-search-border-width, var(--jb-select-border-width, 1px));\n border-color: var(--jb-select-mobile-search-border-color, var(--jb-select-border-color, #f7f6f6));\n border-bottom-width: var(--jb-select-mobile-search-border-bottom-width, var(--p-border-bottom-width));\n border-bottom-color: var(--jb-select-mobile-search-border-bottom-color, var(--jb-select-border-bottom-color, var(--jb-select-border-color, #f7f6f6)));\n border-radius: var(--jb-select-mobile-search-border-radius, var(--jb-select-border-radius, 16px));\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .select-box .front-box .arrow-icon {\n display: none;\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .select-box .selected-value-wrapper {\n opacity: 0;\n transition: none;\n }\n}\n.jb-select-web-component.--focused .middle-divider {\n display: block;\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .middle-divider {\n margin: var(--jb-select-middle-div-mobile-margin, 16px 0 0 0);\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .select-list-wrapper {\n position: initial;\n margin: var(--jb-select-mobile-item-list-margin, 16px 0);\n border-radius: var(--jb-select-mobile-item-list-border-radius, var(--jb-select-border-radius, 16px));\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .label-wrapper {\n display: flex;\n }\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .label-wrapper label {\n color: #fff;\n font-size: 1.5em;\n display: flex;\n align-items: center;\n }\n}\n.jb-select-web-component.--focused .label-wrapper .close-button {\n display: none;\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--focused .label-wrapper .close-button {\n display: flex;\n width: 48px;\n height: 48px;\n justify-content: center;\n align-items: center;\n color: #fff;\n }\n .jb-select-web-component.--focused .label-wrapper .close-button .close-btn-svg-bg {\n opacity: var(--jb-select-close-bg-opacity, 0.4);\n fill: var(--jb-select-close-bg-color, #1f1735);\n }\n .jb-select-web-component.--focused .label-wrapper .close-button .close-btn-svg-path {\n fill: var(--jb-select-close-x-color, #fff);\n }\n}\n.jb-select-web-component.--has-value .select-box {\n border-color: var(--jb-select-border-color-selected, #c3ff14);\n background-color: var(--jb-select-bgcolor-selected, #f7f6f6);\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component.--has-value .select-box:focus-within {\n background-color: var(--jb-select-mobile-input-bgcolor, #f7f6f6);\n }\n}\n.jb-select-web-component .label-wrapper label {\n width: 100%;\n margin: 4px 0px;\n display: block;\n font-size: var(--jb-select-label-font-size, 0.8em);\n font-weight: var(--jb-select-label-font-weight, normal);\n color: var(--jb-select-label-color, #1f1735);\n}\n.jb-select-web-component .label-wrapper label.--hide {\n display: none;\n}\n.jb-select-web-component .label-wrapper .close-button {\n display: none;\n}\n.jb-select-web-component .select-box {\n width: 100%;\n box-sizing: border-box;\n height: var(--jb-select-height, 2.5rem);\n border: solid var(--jb-select-border-width, 1px) var(--jb-select-border-color, #f7f6f6);\n border-bottom: solid var(--p-border-bottom-width) var(--jb-select-border-color, #f7f6f6);\n border-radius: var(--jb-select-border-radius, 1rem);\n background-color: var(--jb-select-bgcolor, #f7f6f6);\n margin: var(--jb-select-select-box-margin, 4px 0px 0px 0px);\n overflow: hidden;\n display: flex;\n padding-inline-end: var(--jb-select-box-padding-end, 1rem);\n gap: 0.5rem;\n align-items: center;\n}\n.jb-select-web-component .select-box:focus-within {\n border-color: var(--jb-select-border-color, var(--p-p-color));\n border-bottom-color: var(--jb-select-border-color, var(--p-p-color));\n border-radius: var(--jb-select-border-radius, 1rem) var(--jb-select-border-radius, 1rem) 0 0;\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component .select-box:focus-within {\n border-radius: var(--jb-select-mobile-search-border-radius, var(--jb-select-border-radius, 1rem));\n }\n}\n.jb-select-web-component .select-box .start-section {\n height: 100%;\n width: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.jb-select-web-component .select-box .middle-section {\n position: relative;\n width: 100%;\n height: 100%;\n flex: 1;\n}\n.jb-select-web-component .select-box .middle-section .selected-value-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n overflow: hidden;\n z-index: 1;\n}\n.jb-select-web-component .select-box .middle-section .selected-value-wrapper.--search-typed {\n opacity: 0;\n}\n.jb-select-web-component .select-box .middle-section .selected-value-wrapper .selected-value {\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n background-color: transparent;\n padding: 2px 12px 0 12px;\n display: block;\n font-family: inherit;\n font-size: var(--jb-select-selected-value-font-size, 1.1em);\n color: var(--jb-select-selected-value-color, #1f1735);\n margin: 0;\n border-radius: 0;\n display: flex;\n align-items: center;\n}\n.jb-select-web-component .select-box .middle-section .front-box {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n overflow: hidden;\n z-index: 2;\n}\n.jb-select-web-component .select-box .middle-section .front-box input {\n border: none;\n width: 100%;\n box-sizing: border-box;\n height: 100%;\n background-color: transparent;\n padding: 2px 12px 0 12px;\n display: block;\n font-family: inherit;\n font-size: var(--jb-select-value-font-size, 1.1rem);\n color: var(--jb-select-input-color, #1f1735);\n margin: 0;\n border-radius: 0;\n}\n.jb-select-web-component .select-box .middle-section .front-box input:focus {\n outline: none;\n}\n.jb-select-web-component .select-box .middle-section .front-box input::placeholder {\n color: var(--jb-select-placeholder-color, initial);\n font-size: var(--jb-select-placeholder-font-size, 1.1em);\n}\n.jb-select-web-component .select-box .end-section .arrow-icon {\n margin: var(--jb-select-arrow-icon-margin, 0 0 0 0);\n}\n.jb-select-web-component .select-box:focus-within .selected-value {\n opacity: 0.7;\n transition: all 0.3s ease;\n}\n.jb-select-web-component .middle-divider {\n display: none;\n position: relative;\n z-index: calc(var(--p-base-z-index) + 3);\n width: 100%;\n height: var(--p-middle-div-height);\n background-color: var(--jb-select-middle-div-color, var(--p-p-color));\n margin: var(--jb-select-middle-div-margin, calc(-1 * var(--p-border-bottom-width)) 0);\n border-radius: var(--jb-select-middle-div-radius, 0px);\n}\n.jb-select-web-component .message-box {\n font-size: var(--jb-select-message-font-size, 0.7em);\n font-weight: var(--jb-select-message-font-weight, normal);\n padding: 4px 8px;\n color: var(--jb-select-message-color, #929292);\n}\n.jb-select-web-component .message-box:empty {\n padding: 0;\n}\n.jb-select-web-component .message-box.--error {\n color: red;\n}\n.jb-select-web-component .select-list-wrapper {\n display: none;\n position: absolute;\n margin: calc(-1 * var(--p-border-bottom-width)) 0;\n height: auto;\n overflow: hidden;\n width: 100%;\n background-color: var(--jb-select-bgcolor, #f7f6f6);\n border-radius: 0 0 var(--jb-select-border-radius, 16px) var(--jb-select-border-radius, 16px);\n border: solid var(--jb-select-list-border-width, 1px) var(--jb-select-border-color, var(--p-p-color));\n border-top: none;\n border-bottom: solid var(--p-border-bottom-width) var(--jb-select-border-color, var(--p-p-color));\n box-shadow: var(--jb-select-list-box-shadow);\n box-sizing: border-box;\n z-index: calc(var(--p-base-z-index) + 2);\n}\n.jb-select-web-component .select-list-wrapper.--show {\n display: block;\n}\n.jb-select-web-component .select-list-wrapper .select-list {\n width: 100%;\n max-height: var(--jb-select-list-max-height, 400px);\n overflow-y: auto;\n padding: var(--jb-select-list-padding, 16px 0);\n}\n.jb-select-web-component .select-list-wrapper .select-list:empty {\n padding: 0;\n}\n@media (min-width: 320px) and (max-width: 767px) {\n .jb-select-web-component .select-list-wrapper .select-list {\n max-height: calc(var(--p-mobile-modal-height) - 240px);\n }\n}\n.jb-select-web-component .select-list-wrapper .select-list .select-option {\n min-height: 36px;\n padding: 4px 16px;\n display: flex;\n align-items: center;\n font-size: 0.9em;\n color: var(--jb-select-option-color, inherit);\n background-color: var(--jb-select-option-background-color, transparent);\n}\n.jb-select-web-component .select-list-wrapper .select-list .select-option:hover {\n background-color: var(--jb-select-option-background-color-hover, #1073db);\n color: var(--jb-select-option-color-hover, #fff);\n cursor: pointer;\n}\n.jb-select-web-component .select-list-wrapper .select-list .select-option.--selected-option {\n font-weight: 900;\n}\n.jb-select-web-component .select-list-wrapper .select-list::-webkit-scrollbar {\n width: 9px;\n background-color: transparent;\n}\n.jb-select-web-component .select-list-wrapper .select-list::-webkit-scrollbar-thumb {\n background-color: var(--jb-select-list-scroll-color, #c3c3c3);\n border-radius: var(--jb-select-list-scroll-border-radius, 4px);\n}\n.jb-select-web-component .select-list-wrapper .empty-list-placeholder {\n display: none;\n text-align: center;\n color: #838383;\n font-style: italic;\n padding: 8px 0;\n}\n.jb-select-web-component .select-list-wrapper .empty-list-placeholder.--show {\n display: block;\n}</style>\n<div class="jb-select-web-component">\r\n <div class="label-wrapper">\r\n <label class="--hide"><span class="label-value"></span></label>\r\n \x3c!-- close button will be visible on mobile modal --\x3e\r\n <div class="close-button">\r\n <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none">\r\n <path class="close-btn-svg-bg" opacity="0.4" d="M16.3399 1.9998H7.66988C4.27988 1.9998 1.99988 4.3798 1.99988 7.9198V16.0898C1.99988 19.6198 4.27988 21.9998 7.66988 21.9998H16.3399C19.7299 21.9998 21.9999 19.6198 21.9999 16.0898V7.9198C21.9999 4.3798 19.7299 1.9998 16.3399 1.9998Z"/>\r\n <path class="close-btn-svg-path" d="M15.0156 13.7703L13.2366 11.9923L15.0146 10.2143C15.3566 9.8733 15.3566 9.3183 15.0146 8.9773C14.6726 8.6333 14.1196 8.6343 13.7776 8.9763L11.9986 10.7543L10.2196 8.9743C9.87758 8.6323 9.32358 8.6343 8.98158 8.9743C8.64058 9.3163 8.64058 9.8713 8.98158 10.2123L10.7616 11.9923L8.98558 13.7673C8.64358 14.1093 8.64358 14.6643 8.98558 15.0043C9.15658 15.1763 9.37958 15.2613 9.60358 15.2613C9.82858 15.2613 10.0516 15.1763 10.2226 15.0053L11.9986 13.2293L13.7786 15.0083C13.9496 15.1793 14.1726 15.2643 14.3966 15.2643C14.6206 15.2643 14.8446 15.1783 15.0156 15.0083C15.3576 14.6663 15.3576 14.1123 15.0156 13.7703Z" fill="#200E32"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class="select-box">\r\n <div class="start-section">\r\n <slot name="start-section"></slot>\r\n </div>\r\n <div class="middle-section">\r\n <div class="selected-value-wrapper"></div>\r\n <div class="front-box">\r\n <input class="input">\r\n\r\n </div>\r\n </div>\r\n <div class="end-section">\r\n <div class="arrow-icon" tabindex="-1">\r\n <slot name="select-arrow-icon">\r\n <svg width="8" height="8" id="Layer_1" x="0px" y="0px" viewBox="0 0 494.1 371.1" style="enable-background:new 0 0 494.1 371.1;" xml:space="preserve">\r\n <path d="M293,343.8L480.9,69.3c8.7-12.7,13.3-25.4,13.3-36.1c0-20.5-16.5-33.2-44-33.2H44C16.4,0,0,12.7,0,33.2 c0,10.6,4.6,23.2,13.3,35.9l187.9,274.6c12.1,17.7,28.4,27.4,45.9,27.4C264.6,371.1,280.9,361.4,293,343.8z"/>\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="middle-divider">\r\n \x3c!-- middle line between input box and list (hidden by default but user may need it sometimes) --\x3e\r\n </div>\r\n <div class="select-list-wrapper">\r\n <div class="select-list" tabindex="-1">\r\n\r\n </div>\r\n <div class="empty-list-placeholder">\r\n <slot name="empty-list-message">no item available</slot>\r\n </div>\r\n </div>\r\n <div class="message-box"></div>\r\n</div>',e.appendChild(n.content.cloneNode(!0)),this.elements={input:e.querySelector(".select-box input"),componentWrapper:e.querySelector(".jb-select-web-component"),selectedValueWrapper:e.querySelector(".selected-value-wrapper"),messageBox:e.querySelector(".message-box"),optionList:e.querySelector(".select-list"),optionListWrapper:e.querySelector(".select-list-wrapper"),arrowIcon:e.querySelector(".arrow-icon"),label:{wrapper:e.querySelector("label"),text:e.querySelector("label .label-value")},emptyListPlaceholder:e.querySelector(".empty-list-placeholder")},t(this,i,"m",g).call(this)},g=function(){this.elements.input.addEventListener("change",(e=>{t(this,i,"m",S).call(this,e)})),this.elements.input.addEventListener("keypress",t(this,i,"m",V).bind(this)),this.elements.input.addEventListener("keyup",t(this,i,"m",O).bind(this)),this.elements.input.addEventListener("beforeinput",t(this,i,"m",C).bind(this)),this.elements.input.addEventListener("input",(e=>{t(this,i,"m",M).call(this,e)})),this.elements.input.addEventListener("focus",t(this,i,"m",A).bind(this)),this.elements.input.addEventListener("blur",t(this,i,"m",K).bind(this)),this.elements.arrowIcon.addEventListener("click",t(this,i,"m",E).bind(this))},x=function(){this.textValue="",this.value=this.getAttribute("value")||null},y=function(e,n){switch(e){case"label":this.elements.label.text.innerHTML=n,null==n||null==n||""==n?this.elements.label.wrapper.classList.add("--hide"):this.elements.label.wrapper.classList.remove("--hide");break;case"message":this.elements.messageBox.innerHTML=n;break;case"value":t(this,i,"m",k).call(this,n);break;case"required":this.required=""===n||"true"==n||"True"==n;break;case"placeholder":this.placeholder=n;break;case"search-placeholder":this.searchPlaceholder=n}},j=function(){if(t(this,o,"f")){t(this,i,"m",k).call(this,t(this,o,"f"))&&n(this,o,null,"f")}else this.value&&t(this,i,"m",k).call(this,this.value)},k=function(e){const s=this.optionList.find((n=>{if(t(this,i,"m",$).call(this,n)==e)return n}));return s||null==e?(t(this,i,"m",L).call(this,s),!0):(n(this,o,e,"f"),!1)},L=function(e){n(this,o,null,"f"),n(this,s,e,"f"),null==e?(this.textValue="",t(this,i,"m",J).call(this,null),this.elements.componentWrapper.classList.remove("--has-value"),this.isMobileDevice&&this.isOpen||(this.elements.input.placeholder=this.placeholder)):(this.textValue="",t(this,i,"m",J).call(this,e),this.elements.componentWrapper.classList.add("--has-value"),this.isMobileDevice&&this.isOpen||(this.elements.input.placeholder="")),t(this,i,"m",H).call(this,"")},E=function(){this.isOpen?this.blur():this.focus()},V=function(e){const t={altKey:e.altKey,bubbles:e.bubbles,cancelable:e.cancelable,code:e.code,composed:e.composed,ctrlKey:e.ctrlKey,detail:e.detail,isComposing:e.isComposing,key:e.key,location:e.location,metaKey:e.metaKey,view:e.view,repeat:e.repeat,shiftKey:e.shiftKey},n=new KeyboardEvent("keypress",t);this.dispatchEvent(n)},C=function(e){},M=function(e){const n=e.target.value;this.textValue=n,t(this,i,"m",z).call(this,n),t(this,b,"f").checkValidity({showError:!1}),t(this,i,"m",T).call(this,e)},T=function(e){const t=new InputEvent("input",{bubbles:e.bubbles,cancelable:e.cancelable,composed:e.composed,data:e.data,dataTransfer:e.dataTransfer,detail:e.detail,inputType:e.inputType,isComposing:e.isComposing,targetRanges:e.getTargetRanges(),view:e.view});this.dispatchEvent(t)},O=function(e){const n=e.target.value;"Backspace"!==e.key&&"Delete"!==e.key||t(this,i,"m",z).call(this,n),t(this,i,"m",W).call(this,e)},z=function(e){""!==e?this.elements.selectedValueWrapper.classList.add("--search-typed"):this.elements.selectedValueWrapper.classList.remove("--search-typed")},W=function(e){const t=new KeyboardEvent("keyup",{altKey:e.altKey,bubbles:e.bubbles,cancelable:e.cancelable,code:e.code,ctrlKey:e.ctrlKey,detail:e.detail,key:e.key,shiftKey:e.shiftKey,charCode:e.charCode,location:e.location,composed:e.composed,isComposing:e.isComposing,metaKey:e.metaKey,repeat:e.repeat,keyCode:e.keyCode,view:e.view});this.dispatchEvent(t)},S=function(e){const t=e.target.value;n(this,l,t,"f")},A=function(){this.focus()},K=function(e){const t=e.relatedTarget;this.elements.optionListWrapper.contains(t)||this.elements.arrowIcon.contains(t)||this.blur()},q=function(){this.elements.optionListWrapper.classList.add("--show")},D=function(){this.elements.optionListWrapper.classList.remove("--show")},H=function(e){this.displayOptionList=t(this,i,"m",Z).call(this,e)},P=function(){const e=[];this.displayOptionList.forEach((n=>{const s=t(this,i,"m",B).call(this,n);e.push(s)})),this.elements.optionList.innerHTML="",e.forEach((e=>{this.elements.optionList.appendChild(e)}))},B=function(e){let n=null;const l=t(this,i,"m",$).call(this,t(this,s,"f"))==t(this,i,"m",$).call(this,e);return n="function"==typeof this.callbacks.getOptionDOM?this.callbacks.getOptionDOM(e,t(this,i,"m",R).bind(this),l):t(this,i,"m",I).call(this,e,l),n.value=e,n},I=function(e,n){const s=document.createElement("div");return s.classList.add("select-option"),n&&s.classList.add("--selected-option"),s.innerHTML=t(this,i,"m",_).call(this,e),s.addEventListener("click",t(this,i,"m",R).bind(this)),s},R=function(e){const n=t(this,s,"f"),l=e.currentTarget.value;t(this,i,"m",N).call(this,l),this.blur();t(this,i,"m",F).call(this).defaultPrevented&&(e.preventDefault(),t(this,i,"m",N).call(this,n))},N=function(e){t(this,i,"m",L).call(this,e),t(this,i,"m",Q).call(this,!0)},Z=function(e){const n=[];return this.optionList.filter((s=>{const l=t(this,i,"m",_).call(this,s),o="string"==typeof l;o&&l.includes(e)&&n.push(s),o||console.warn("the provided values for optionsList is not of type string.",{option:s,title:l})})),n},F=function(){const e=new Event("change",{bubbles:!0,cancelable:!0});return this.dispatchEvent(e),e},J=function(e){if(this.elements.selectedValueWrapper.innerHTML="",null!=e){const n=t(this,i,"m",U).call(this,e);this.elements.selectedValueWrapper.appendChild(n)}},U=function(e){return"function"==typeof this.callbacks.getSelectedValueDOM?this.callbacks.getSelectedValueDOM(e):t(this,i,"m",Y).call(this,e)},Y=function(e){const n=t(this,i,"m",_).call(this,e),s=document.createElement("div");return s.classList.add("selected-value"),s.innerHTML=n,s},$=function(e){this.callbacks.getOptionValue&&"function"!=typeof this.callbacks.getOptionValue&&console.error("getOptionValue callback is not a function");try{return"function"==typeof this.callbacks.getOptionValue?this.callbacks.getOptionValue(e):e}catch(t){console.error("Invalid getOptionValue callback Result, must be a function that returns the value of an option",e)}},_=function(e){"function"!=typeof this.callbacks.getOptionTitle&&console.error("getOptionTitle callback is not a function");try{return this.callbacks.getOptionTitle(e)}catch(t){console.error("Invalid getOptionTitle callback Result, must be a function that returns the value of an option",e)}return""},G=function(){const e=[];if(this.required){const t=`${this.getAttribute("label")||""} حتما باید انتخاب شود`;e.push({validator:({selectedOption:e})=>null!=e,message:t,stateType:"valueMissing"})}return e},Q=function(e){if(!this.isAutoValidationDisabled)return t(this,b,"f").checkValidity({showError:e})},X=function(e){if(e.isAllValid)t(this,u,"f")?.setValidity({},"");else{const n={};let i="";e.validationList.forEach((e=>{e.isValid||(e.validation.stateType?n[e.validation.stateType]=!0:n.customError=!0,""==i&&(i=e.message))})),t(this,u,"f")?.setValidity(n,i)}};!customElements.get("jb-select")&&window.customElements.define("jb-select",ee),exports.JBSelectWebComponent=ee;
|
|
2
|
-
//# sourceMappingURL=jb-select.cjs.js.map
|
package/dist/jb-select.cjs.js.br
DELETED
|
Binary file
|
package/dist/jb-select.cjs.js.gz
DELETED
|
Binary file
|