@volverjs/ui-vue 0.0.3 → 0.0.4
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/LICENSE +1 -1
- package/README.md +52 -13
- package/dist/Volver.d.ts +5 -1
- package/dist/components/VvAccordion/VvAccordion.es.js +113 -66
- package/dist/components/VvAccordion/VvAccordion.umd.js +1 -1
- package/dist/components/VvAccordionGroup/VvAccordionGroup.es.js +159 -101
- package/dist/components/VvAccordionGroup/VvAccordionGroup.umd.js +1 -1
- package/dist/components/VvAction/VvAction.es.js +170 -0
- package/dist/components/VvAction/VvAction.umd.js +1 -0
- package/dist/components/VvAction/VvAction.vue.d.ts +63 -0
- package/dist/components/VvAction/index.d.ts +24 -0
- package/dist/components/VvBadge/VvBadge.es.js +86 -16
- package/dist/components/VvBadge/VvBadge.umd.js +1 -1
- package/dist/components/VvBreadcrumb/VvBreadcrumb.es.js +97 -41
- package/dist/components/VvBreadcrumb/VvBreadcrumb.umd.js +1 -1
- package/dist/components/VvButton/VvButton.es.js +434 -251
- package/dist/components/VvButton/VvButton.umd.js +1 -1
- package/dist/components/VvButton/VvButton.vue.d.ts +50 -50
- package/dist/components/VvButton/index.d.ts +22 -67
- package/dist/components/VvButtonGroup/VvButtonGroup.es.js +118 -43
- package/dist/components/VvButtonGroup/VvButtonGroup.umd.js +1 -1
- package/dist/components/VvCard/VvCard.es.js +38 -25
- package/dist/components/VvCard/VvCard.umd.js +1 -1
- package/dist/components/VvCheckbox/VvCheckbox.es.js +334 -154
- package/dist/components/VvCheckbox/VvCheckbox.umd.js +1 -1
- package/dist/components/VvCheckbox/VvCheckbox.vue.d.ts +2 -2
- package/dist/components/VvCheckbox/index.d.ts +1 -1
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.es.js +401 -204
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.umd.js +1 -1
- package/dist/components/VvCheckboxGroup/VvCheckboxGroup.vue.d.ts +2 -2
- package/dist/components/VvCheckboxGroup/index.d.ts +1 -1
- package/dist/components/VvCombobox/VvCombobox.es.js +950 -594
- package/dist/components/VvCombobox/VvCombobox.umd.js +1 -1
- package/dist/components/VvCombobox/VvCombobox.vue.d.ts +54 -30
- package/dist/components/VvCombobox/index.d.ts +18 -13
- package/dist/components/VvDialog/VvDialog.es.js +139 -64
- package/dist/components/VvDialog/VvDialog.umd.js +1 -1
- package/dist/components/VvDropdown/VvDropdown.es.js +276 -158
- package/dist/components/VvDropdown/VvDropdown.umd.js +1 -1
- package/dist/components/VvDropdown/VvDropdown.vue.d.ts +9 -9
- package/dist/components/VvDropdown/VvDropdownAction.vue.d.ts +61 -0
- package/dist/components/VvDropdown/VvDropdownOption.vue.d.ts +52 -0
- package/dist/components/VvDropdown/index.d.ts +6 -9
- package/dist/components/VvDropdownAction/VvDropdownAction.es.js +251 -0
- package/dist/components/VvDropdownAction/VvDropdownAction.umd.js +1 -0
- package/dist/components/VvDropdownItem/VvDropdownItem.es.js +30 -15
- package/dist/components/VvDropdownItem/VvDropdownItem.umd.js +1 -1
- package/dist/components/VvDropdownOption/VvDropdownOption.es.js +176 -0
- package/dist/components/VvDropdownOption/VvDropdownOption.umd.js +1 -0
- package/dist/components/VvIcon/VvIcon.es.js +48 -32
- package/dist/components/VvIcon/VvIcon.umd.js +1 -1
- package/dist/components/VvInputText/VvInputText.es.js +508 -344
- package/dist/components/VvInputText/VvInputText.umd.js +1 -1
- package/dist/components/VvInputText/VvInputText.vue.d.ts +11 -4
- package/dist/components/VvInputText/index.d.ts +13 -2
- package/dist/components/VvProgress/VvProgress.es.js +90 -20
- package/dist/components/VvProgress/VvProgress.umd.js +1 -1
- package/dist/components/VvRadio/VvRadio.es.js +305 -125
- package/dist/components/VvRadio/VvRadio.umd.js +1 -1
- package/dist/components/VvRadio/VvRadio.vue.d.ts +2 -2
- package/dist/components/VvRadio/index.d.ts +1 -1
- package/dist/components/VvRadioGroup/VvRadioGroup.es.js +372 -175
- package/dist/components/VvRadioGroup/VvRadioGroup.umd.js +1 -1
- package/dist/components/VvRadioGroup/VvRadioGroup.vue.d.ts +2 -2
- package/dist/components/VvRadioGroup/index.d.ts +1 -1
- package/dist/components/VvSelect/VvSelect.es.js +371 -216
- package/dist/components/VvSelect/VvSelect.umd.js +1 -1
- package/dist/components/VvSelect/VvSelect.vue.d.ts +11 -4
- package/dist/components/VvSelect/index.d.ts +5 -5
- package/dist/components/VvTextarea/VvTextarea.es.js +408 -244
- package/dist/components/VvTextarea/VvTextarea.umd.js +1 -1
- package/dist/components/VvTextarea/VvTextarea.vue.d.ts +11 -4
- package/dist/components/VvTextarea/index.d.ts +5 -5
- package/dist/components/VvTooltip/VvTooltip.es.js +88 -18
- package/dist/components/VvTooltip/VvTooltip.umd.js +1 -1
- package/dist/components/index.es.js +1913 -1521
- package/dist/components/index.umd.js +1 -1
- package/dist/composables/dropdown/useInjectDropdown.d.ts +1 -1
- package/dist/composables/dropdown/useProvideDropdown.d.ts +2 -2
- package/dist/constants.d.ts +30 -0
- package/dist/directives/index.es.js +128 -0
- package/dist/directives/index.umd.js +1 -0
- package/dist/directives/v-tooltip.es.js +126 -0
- package/dist/directives/v-tooltip.umd.js +1 -0
- package/dist/icons.es.js +3 -3
- package/dist/icons.umd.js +1 -1
- package/dist/index.es.js +2102 -1761
- package/dist/index.umd.js +1 -1
- package/dist/props/index.d.ts +179 -11
- package/dist/resolvers/unplugin.d.ts +8 -8
- package/dist/resolvers/unplugin.es.js +51 -30
- package/dist/resolvers/unplugin.umd.js +1 -1
- package/dist/stories/Combobox/Combobox.settings.d.ts +44 -0
- package/dist/stories/Dropdown/Dropdown.settings.d.ts +3 -2
- package/package.json +60 -34
- package/src/Volver.ts +12 -5
- package/src/assets/icons/detailed.json +1 -1
- package/src/assets/icons/normal.json +1 -1
- package/src/assets/icons/simple.json +1 -1
- package/src/components/VvAction/VvAction.vue +144 -0
- package/src/components/VvAction/index.ts +5 -0
- package/src/components/VvButton/VvButton.vue +31 -114
- package/src/components/VvButton/index.ts +6 -79
- package/src/components/VvCombobox/VvCombobox.vue +54 -42
- package/src/components/VvCombobox/index.ts +11 -9
- package/src/components/VvDropdown/VvDropdownAction.vue +44 -0
- package/src/components/VvDropdown/VvDropdownOption.vue +65 -0
- package/src/components/VvDropdown/index.ts +4 -9
- package/src/components/VvSelect/index.ts +2 -4
- package/src/composables/dropdown/useInjectDropdown.ts +1 -1
- package/src/composables/dropdown/useProvideDropdown.ts +7 -9
- package/src/composables/useModifiers.ts +4 -7
- package/src/constants.ts +36 -0
- package/src/props/index.ts +106 -14
- package/src/resolvers/unplugin.ts +81 -48
- package/src/stories/Accordion/AccordionSlots.stories.mdx +2 -2
- package/src/stories/AccordionGroup/AccordionGroupSlots.stories.mdx +2 -1
- package/src/stories/Breadcrumb/Breadcrumb.stories.mdx +2 -1
- package/src/stories/Button/Button.stories.mdx +4 -2
- package/src/stories/Button/Button.test.ts +3 -1
- package/src/stories/Button/ButtonModifiers.stories.mdx +2 -2
- package/src/stories/Button/ButtonSlots.stories.mdx +8 -7
- package/src/stories/Button/ButtonState.stories.mdx +2 -11
- package/src/stories/Card/Card.stories.mdx +2 -1
- package/src/stories/Checkbox/Checkbox.stories.mdx +2 -1
- package/src/stories/CheckboxGroup/CheckboxGroup.stories.mdx +2 -1
- package/src/stories/CheckboxGroup/CheckboxGroupSlots.stories.mdx +2 -1
- package/src/stories/Combobox/Combobox.settings.ts +44 -0
- package/src/stories/Combobox/Combobox.stories.mdx +40 -1
- package/src/stories/Dialog/Dialog.stories.mdx +2 -1
- package/src/stories/Dropdown/Dropdown.settings.ts +3 -2
- package/src/stories/Dropdown/Dropdown.stories.mdx +14 -12
- package/src/stories/Dropdown/DropdownMultilevel.stories.mdx +56 -0
- package/src/stories/Dropdown/DropdownSlots.stories.mdx +14 -13
- package/src/stories/Icon/Icon.stories.mdx +2 -1
- package/src/stories/Icon/IconsCollection.stories.mdx +2 -1
- package/src/stories/InputText/InputText.stories.mdx +2 -1
- package/src/stories/Progress/Progress.stories.mdx +2 -1
- package/src/stories/Radio/Radio.stories.mdx +2 -1
- package/src/stories/RadioGroup/RadioGroup.stories.mdx +2 -1
- package/src/stories/RadioGroup/RadioGroupSlots.stories.mdx +2 -1
- package/src/stories/Select/Select.stories.mdx +2 -1
- package/src/stories/Textarea/Textarea.stories.mdx +2 -1
- package/src/stories/Tooltip/Tooltip.stories.mdx +2 -1
- package/src/stories/Tooltip/TooltipDirective.stories.mdx +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(t,O){typeof exports=="object"&&typeof module<"u"?module.exports=O(require("vue"),require("@vueuse/core"),require("nanoid")):typeof define=="function"&&define.amd?define(["vue","@vueuse/core","nanoid"],O):(t=typeof globalThis<"u"?globalThis:t||self,t.VvRadioGroup=O(t.vue,t.core,t.nanoid))})(this,function(t,O,U){"use strict";var B=(e=>(e.left="left",e.right="right",e.top="top",e.bottom="bottom",e))(B||{}),N=(e=>(e.topStart="top-start",e.topEnd="top-end",e.bottomStart="bottom-start",e.bottomEnd="bottom-end",e.leftStart="left-start",e.leftEnd="left-end",e.rightStart="right-start",e.rightEnd="right-end",e))(N||{}),R=(e=>(e.before="before",e.after="after",e))(R||{}),A=(e=>(e.button="button",e.submit="submit",e.reset="reset",e))(A||{}),G=(e=>(e._blank="_blank",e._self="_self",e._parent="_parent",e._top="_top",e))(G||{});const $=Symbol.for("radioGroup");function D(e,n,r){return r?k(e,r)===k(n,r):E(e,n)}function E(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){const r=Array.isArray(e),u=Array.isArray(n);let a,l,s;if(r&&u){if(l=e.length,l!=n.length)return!1;for(a=l;a--!==0;)if(!E(e[a],n[a]))return!1;return!0}if(r!=u)return!1;const c=e instanceof Date,o=n instanceof Date;if(c!=o)return!1;if(c&&o)return e.getTime()==n.getTime();const d=e instanceof RegExp,f=n instanceof RegExp;if(d!=f)return!1;if(d&&f)return e.toString()==n.toString();const i=Object.keys(e);if(l=i.length,l!==Object.keys(n).length)return!1;for(a=l;a--!==0;)if(!Object.prototype.hasOwnProperty.call(n,i[a]))return!1;for(a=l;a--!==0;)if(s=i[a],!E(e[s],n[s]))return!1;return!0}return e!==e&&n!==n}function k(e,n){if(e&&Object.keys(e).length&&n){if(n.indexOf(".")===-1)return e[n];{const r=n.split(".");let u=e;for(let a=0,l=r.length;a<l;++a){if(e==null)return null;u=u[r[a]]}return u}}else return null}function T(e,n){if(e!=null&&n&&n.length){for(const r of n)if(D(e,r))return!0}return!1}function x(e){return(n=>n==null||n===""||Array.isArray(n)&&n.length===0||!(n instanceof Date)&&typeof n=="object"&&Object.keys(n).length===0)(t.unref(e))}function J(e){return typeof e=="string"||e instanceof String}function j(e){return Array.isArray(e)?e.filter(n=>J(n)).join(" "):e}function q(e,n){const{invalid:r,valid:u,hint:a,loading:l}=n,{hintLabel:s,modelValue:c,valid:o,validLabel:d,invalid:f,invalidLabel:i,...S}=t.toRefs(e),p=k(S,"loading"),m=k(S,"loadingLabel"),v=t.computed(()=>f.value?!!(f.value&&r||i!=null&&i.value&&Array.isArray(i.value)&&i.value.length>0||i!=null&&i.value&&!x(i)):!1),y=t.computed(()=>!!(s&&s.value||a)),g=t.computed(()=>!!(d&&d.value||u)),_=t.computed(()=>!!(p!=null&&p.value&&l||p!=null&&p.value&&(m!=null&&m.value))),V=t.computed(()=>y.value||g.value||v.value||_.value);return{hasInvalid:v,hasHint:y,hasValid:g,hasLoading:_,HintSlot:{name:"HintSlot",props:{params:{type:Object,default:()=>({})}},setup(I){const b=t.computed(()=>{const h=O.toReactive({hintLabel:s,modelValue:c,valid:o,validLabel:d,invalid:f,invalidLabel:i,loading:p,loadingLabel:m,...I.params});return f!=null&&f.value?(r==null?void 0:r(h))||j(i==null?void 0:i.value)||(s==null?void 0:s.value):o!=null&&o.value?(u==null?void 0:u(h))||j(d==null?void 0:d.value)||(s==null?void 0:s.value):p!=null&&p.value?(l==null?void 0:l(h))||j(m==null?void 0:m.value)||(s==null?void 0:s.value):(a==null?void 0:a(h))||j(s==null?void 0:s.value)||(s==null?void 0:s.value)});return{isVisible:V,hasInvalid:v,hasValid:g,hintContent:b}},render(){if(this.isVisible)return t.h("small",{role:this.hasInvalid?"alert":this.hasValid?"status":void 0},this.hintContent)}}}}const W={to:{type:[String,Object]},href:String,target:{type:String,validator:e=>Object.values(G).includes(e)},rel:{type:String,default:"noopener noreferrer"}},F={valid:Boolean,validLabel:[String,Array]},H={invalid:Boolean,invalidLabel:[String,Array]},P={disabled:Boolean},Y={active:Boolean},Q={pressed:Boolean},C={label:[String,Number]},K={readonly:Boolean},w={modifiers:[String,Array]},M={hintLabel:{type:String,default:""}},X={options:{type:Array,default:()=>[]},labelKey:{type:[String,Function],default:"label"},valueKey:{type:[String,Function],default:"value"},disabledKey:{type:[String,Function],default:"disabled"}};R.before;const Z={tabindex:{type:[String,Number],default:0}},L={id:[String,Number]};B.bottom;const ee={...{...L,name:{type:String,required:!0}},...Z,...F,...H,...M,...P,...K,...w,...C,value:[String,Number,Boolean],modelValue:[Object,Number,Boolean,String]},te={...F,...H,...X,...M,...P,...K,...w,...C,modelValue:[String,Array],name:{type:String,required:!0},vertical:Boolean};({...P,...C,...Q,...Y,...W,type:A.button});function ne(e){const n=t.inject(e,void 0),r=t.computed(()=>!x(n));function u(a,l,s){if(n!=null&&n.value){const o=t.unref(n.value)[a];return t.computed({get(){return o==null?void 0:o.value},set(d){o.value=d}})}const c=t.toRef(l,a);return t.computed({get(){return c.value},set(o){s&&s(`update:${a}`,o)}})}return{group:n,isInGroup:r,getGroupOrLocalRef:u}}const re=ee,oe=["click","update:modelValue","change","blur"];function ae(e,n){const{id:r}=t.toRefs(e),{group:u,isInGroup:a,getGroupOrLocalRef:l}=ne($),s=l("modelValue",e,n),c=l("readonly",e),o=l("disabled",e),d=l("valid",e),f=l("invalid",e);return{id:r,group:u,isInGroup:a,modelValue:s,readonly:c,disabled:o,valid:d,invalid:f}}const le=e=>t.computed(()=>String((e==null?void 0:e.value)||U.nanoid()));function z(e,n,r){return t.computed(()=>{const u={[e]:!0},a=typeof(n==null?void 0:n.value)=="string"?n.value.split(" "):n==null?void 0:n.value;return a&&Array.isArray(a)&&a.forEach(l=>{u[`${e}--${l}`]=!0}),r&&Object.keys(r.value).forEach(l=>{u[`${e}--${l}`]=t.unref(r.value[l])}),u})}const se=["for"],ue=["id","name","disabled","value","tabindex","aria-invalid"],ie={name:"VvRadio"},ce=t.defineComponent({...ie,props:re,emits:oe,setup(e,{emit:n}){const r=e,u=t.useSlots(),{id:a,disabled:l,readonly:s,modelValue:c,valid:o,invalid:d}=ae(r,n),f=le(a),i=t.computed(()=>p.value?-1:r.tabindex),S=t.ref(),p=t.computed(()=>l.value||s.value),m=t.computed(()=>{if(d.value===!0)return!0;if(o.value===!0)return!1}),v=t.computed(()=>Array.isArray(c.value)?T(r.value,c.value):D(r.value,c.value)),y=t.computed(()=>["string","number","boolean"].includes(typeof r.value)?r.value:!0),g=t.computed({get(){return v.value?y.value:null},set(b){Array.isArray(c.value)?c.value=[r.value]:c.value=r.value,n("change",b)}}),{modifiers:_}=t.toRefs(r),V=z("vv-radio",_,t.computed(()=>({valid:o.value,invalid:d.value,disabled:l.value,readonly:s.value}))),{HintSlot:I}=q(r,u);return(b,h)=>(t.openBlock(),t.createElementBlock("label",{class:t.normalizeClass(t.unref(V)),for:t.unref(f)},[t.withDirectives(t.createElementVNode("input",{id:t.unref(f),ref_key:"input",ref:S,"onUpdate:modelValue":h[0]||(h[0]=be=>t.isRef(g)?g.value=be:null),type:"radio",class:"vv-radio__input",name:b.name,disabled:t.unref(p),value:t.unref(y),tabindex:t.unref(i),"aria-invalid":t.unref(m)},null,8,ue),[[t.vModelRadio,t.unref(g)]]),t.renderSlot(b.$slots,"default",{value:t.unref(c)},()=>[t.createTextVNode(t.toDisplayString(b.label),1)]),t.createVNode(t.unref(I),{class:"vv-radio__hint",params:{value:t.unref(c)}},null,8,["params"])],10,se))}}),de=te,fe=["update:modelValue","change"];function pe(e){if(Object.keys(e).some(n=>n!=="key"&&!t.isRef(e[n])))throw Error("One or more groupState props aren't ref.");t.provide(e.key,t.computed(()=>e))}function ye(e){const{options:n,labelKey:r,valueKey:u,disabledKey:a}=t.toRefs(e);return{options:n,getOptionLabel:o=>typeof o!="object"&&o!==null?o:typeof r.value=="function"?r.value(o):o[r.value],getOptionValue:o=>typeof o!="object"&&o!==null?o:typeof u.value=="function"?u.value(o):o[u.value],getOptionDisabled:o=>typeof o!="object"&&o!==null?!1:typeof a.value=="function"?a.value(o):o[a.value]}}const me=["textContent"],ge={class:"vv-radio-group__wrapper"},ve={name:"VvRadioGroup"};return t.defineComponent({...ve,props:de,emits:fe,setup(e,{emit:n}){const r=e,u=t.useSlots(),a=O.useVModel(r,"modelValue",n),{disabled:l,readonly:s,vertical:c,valid:o,invalid:d,modifiers:f}=t.toRefs(r);pe({key:$,modelValue:a,disabled:l,readonly:s,valid:o,invalid:d});const{getOptionLabel:i,getOptionValue:S}=ye(r),p=z("vv-radio-group",f,t.computed(()=>({disabled:l.value,readonly:s.value,horizontal:!c.value,valid:o.value,invalid:d.value}))),m=(y,g)=>({id:`${r.name}_opt${g}`,name:r.name,label:i(y),value:S(y)}),{HintSlot:v}=q(r,u);return(y,g)=>(t.openBlock(),t.createElementBlock("fieldset",{class:t.normalizeClass(t.unref(p))},[y.label?(t.openBlock(),t.createElementBlock("legend",{key:0,textContent:t.toDisplayString(y.label)},null,8,me)):t.createCommentVNode("",!0),t.createElementVNode("div",ge,[y.options.length>0?(t.openBlock(!0),t.createElementBlock(t.Fragment,{key:0},t.renderList(y.options,(_,V)=>(t.openBlock(),t.createBlock(ce,t.mergeProps({key:V},m(_,V)),null,16))),128)):t.renderSlot(y.$slots,"default",{key:1})]),t.createVNode(t.unref(v),{class:"vv-radio-group__hint"})],2))}})});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { Option } from '@/types/generic';
|
|
2
2
|
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
3
3
|
modelValue: (StringConstructor | ArrayConstructor)[];
|
|
4
|
-
label: StringConstructor;
|
|
5
4
|
name: {
|
|
6
5
|
type: StringConstructor;
|
|
7
6
|
required: boolean;
|
|
8
7
|
};
|
|
9
8
|
vertical: BooleanConstructor;
|
|
9
|
+
label: (StringConstructor | NumberConstructor)[];
|
|
10
10
|
modifiers: import("vue").PropType<string | string[]>;
|
|
11
11
|
readonly: BooleanConstructor;
|
|
12
12
|
disabled: BooleanConstructor;
|
|
@@ -36,12 +36,12 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
|
|
|
36
36
|
validLabel: (StringConstructor | ArrayConstructor)[];
|
|
37
37
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, string[], string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
38
38
|
modelValue: (StringConstructor | ArrayConstructor)[];
|
|
39
|
-
label: StringConstructor;
|
|
40
39
|
name: {
|
|
41
40
|
type: StringConstructor;
|
|
42
41
|
required: boolean;
|
|
43
42
|
};
|
|
44
43
|
vertical: BooleanConstructor;
|
|
44
|
+
label: (StringConstructor | NumberConstructor)[];
|
|
45
45
|
modifiers: import("vue").PropType<string | string[]>;
|
|
46
46
|
readonly: BooleanConstructor;
|
|
47
47
|
disabled: BooleanConstructor;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export declare const VvRadioGroupProps: {
|
|
2
2
|
modelValue: (StringConstructor | ArrayConstructor)[];
|
|
3
|
-
label: StringConstructor;
|
|
4
3
|
name: {
|
|
5
4
|
type: StringConstructor;
|
|
6
5
|
required: boolean;
|
|
7
6
|
};
|
|
8
7
|
vertical: BooleanConstructor;
|
|
8
|
+
label: (StringConstructor | NumberConstructor)[];
|
|
9
9
|
modifiers: import("vue").PropType<string | string[]>;
|
|
10
10
|
readonly: BooleanConstructor;
|
|
11
11
|
disabled: BooleanConstructor;
|