@bethinkpl/design-system 22.2.0 → 22.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/manager.js +3 -1
- package/dist/design-system.umd.js +3960 -154
- package/dist/design-system.umd.js.map +1 -1
- package/dist/lib/js/components/Banner/Banner.vue.d.ts +3 -0
- package/dist/lib/js/components/Buttons/Button/Button.vue.d.ts +3 -0
- package/dist/lib/js/components/Buttons/IconButton/IconButton.vue.d.ts +3 -0
- package/dist/lib/js/components/Cards/CardExpandable/CardExpandable.vue.d.ts +3 -0
- package/dist/lib/js/components/Chip/Chip.vue.d.ts +3 -0
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.consts.d.ts +26 -0
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.stories.d.ts +5 -0
- package/dist/lib/js/components/DatePickers/DatePicker/DatePicker.vue.d.ts +107 -0
- package/dist/lib/js/components/DatePickers/DatePicker/index.d.ts +3 -0
- package/dist/lib/js/components/DatePickers/DatePickerBox/DatePickerBox.vue.d.ts +268 -0
- package/dist/lib/js/components/DatePickers/DatePickerBox/index.d.ts +2 -0
- package/dist/lib/js/components/Drawer/DrawerHeader/DrawerHeader.vue.d.ts +3 -288
- package/dist/lib/js/components/Drawer/DrawerListItem/DrawerListItem.vue.d.ts +3 -234
- package/dist/lib/js/components/Drawer/DrawerSection/DrawerSection.vue.d.ts +3 -0
- package/dist/lib/js/components/Drawer/DrawerTile/DrawerTile.vue.d.ts +6 -2
- package/dist/lib/js/components/Form/Checkbox/Checkbox.vue.d.ts +3 -0
- package/dist/lib/js/components/Form/RadioButton/RadioButton.vue.d.ts +3 -0
- package/dist/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue.d.ts +3 -0
- package/dist/lib/js/components/Headers/SectionHeader/SectionHeader.vue.d.ts +3 -0
- package/dist/lib/js/components/Icons/Icon/Icon.consts.d.ts +3 -0
- package/dist/lib/js/components/Modal/Modal.vue.d.ts +3 -0
- package/dist/lib/js/components/Modals/Modal/Modal.vue.d.ts +3 -0
- package/dist/lib/js/components/Outline/OutlineItem/OutlineItem.vue.d.ts +3 -0
- package/dist/lib/js/components/Pagination/Pagination.vue.d.ts +3 -0
- package/dist/lib/js/components/ProgressBar/ProgressBar.vue.d.ts +3 -0
- package/dist/lib/js/components/ProgressDonutChart/ProgressDonutChart.vue.d.ts +3 -0
- package/dist/lib/js/components/RichList/RichListItem/RichListItem.vue.d.ts +3 -0
- package/dist/lib/js/components/SelectList/SelectList.vue.d.ts +3 -4
- package/dist/lib/js/components/SelectList/SelectListItem/SelectListItem.vue.d.ts +3 -264
- package/dist/lib/js/components/SelectList/SelectListItemDivider/SelectListItemDivider.vue.d.ts +3 -8
- package/dist/lib/js/components/SelectList/SelectListItemTile/SelectListItemTile.vue.d.ts +6 -2
- package/dist/lib/js/components/SelectionTile/SelectionTile.vue.d.ts +5 -2
- package/dist/lib/js/components/Statuses/AccessStatus/AccessStatus.vue.d.ts +3 -0
- package/dist/lib/js/components/Statuses/BlockadeStatus/BlockadeStatus.vue.d.ts +3 -0
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionOpenEnded/SurveyQuestionOpenEnded.vue.d.ts +3 -0
- package/dist/lib/js/components/SurveyQuestions/SurveyQuestionScale/SurveyQuestionScale.vue.d.ts +3 -0
- package/dist/lib/js/components/Switch/Switch.vue.d.ts +3 -0
- package/dist/lib/js/components/Tile/Tile.consts.d.ts +3 -0
- package/dist/lib/js/components/Tile/Tile.sb.shared.d.ts +3 -0
- package/dist/lib/js/components/Tile/Tile.shared.d.ts +8 -3
- package/dist/lib/js/components/Tile/Tile.vue.d.ts +9 -2
- package/dist/lib/js/components/Toggles/ToggleButton/ToggleButton.vue.d.ts +3 -0
- package/dist/lib/js/icons/fontawesome.d.ts +3 -0
- package/dist/lib/js/index.d.ts +58 -0
- package/dist/tools/importers/helpers/modifiers.d.ts +9 -0
- package/docs/166.463f1d4f.iframe.bundle.js +2 -0
- package/docs/{39.bfc720d8.iframe.bundle.js → 39.0fa13ab1.iframe.bundle.js} +2 -2
- package/docs/iframe.html +1 -1
- package/docs/index.html +1 -1
- package/docs/main.ec4e5d4f1933fc03f588.manager.bundle.js +1 -0
- package/docs/main.f33ff81a.iframe.bundle.js +2 -0
- package/docs/main.f33ff81a.iframe.bundle.js.LICENSE.txt +1 -0
- package/docs/project.json +1 -1
- package/docs/{runtime~main.b2826aa6.iframe.bundle.js → runtime~main.c8f2837a.iframe.bundle.js} +1 -1
- package/lib/js/components/DatePickers/DatePicker/DatePicker.consts.ts +33 -0
- package/lib/js/components/DatePickers/DatePicker/DatePicker.stories.ts +138 -0
- package/lib/js/components/DatePickers/DatePicker/DatePicker.vue +333 -0
- package/lib/js/components/DatePickers/DatePicker/index.ts +5 -0
- package/lib/js/components/DatePickers/DatePickerBox/DatePickerBox.vue +291 -0
- package/lib/js/components/DatePickers/DatePickerBox/index.ts +3 -0
- package/lib/js/components/Headers/OverlayHeader/OverlayHeader.stories.ts +1 -1
- package/lib/js/components/Headers/OverlayHeader/OverlayHeader.vue +11 -4
- package/lib/js/components/Tile/Tile.consts.ts +6 -0
- package/lib/js/components/Tile/Tile.sb.shared.ts +2 -0
- package/lib/js/components/Tile/Tile.shared.ts +8 -4
- package/lib/js/components/Tile/Tile.vue +10 -0
- package/lib/js/icons/fontawesome.ts +6 -0
- package/lib/js/index.ts +58 -0
- package/package.json +7 -3
- package/docs/531.90dff866.iframe.bundle.js +0 -2
- package/docs/main.115da493.iframe.bundle.js +0 -1
- package/docs/main.44a93c1fb278828c899f.manager.bundle.js +0 -1
- /package/docs/{531.90dff866.iframe.bundle.js.LICENSE.txt → 166.463f1d4f.iframe.bundle.js.LICENSE.txt} +0 -0
- /package/docs/{39.bfc720d8.iframe.bundle.js.LICENSE.txt → 39.0fa13ab1.iframe.bundle.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
|
package/docs/project.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1721980686635,"builder":{"name":"webpack5"},"hasCustomBabel":false,"hasCustomWebpack":true,"hasStaticDirs":false,"hasStorybookEslint":true,"refCount":0,"metaFramework":{"name":"vue-cli","packageName":"@vue/cli-service","version":"5.0.8"},"packageManager":{"type":"yarn","version":"1.22.22"},"storybookVersion":"6.5.13","language":"typescript","storybookPackages":{"@storybook/builder-webpack5":{"version":"6.5.13"},"@storybook/manager-webpack5":{"version":"6.5.13"},"@storybook/vue3":{"version":"6.5.13"},"eslint-plugin-storybook":{"version":"0.6.6"}},"framework":{"name":"vue3"},"addons":{"@storybook/addon-actions":{"version":"6.5.16"},"@storybook/addon-docs":{"version":"6.5.15"},"@storybook/addon-controls":{"version":"6.5.15"},"@storybook/addon-storysource":{"version":"6.5.15"},"@storybook/addon-viewport":{"version":"6.5.15"},"storybook-addon-designs":{"version":"6.3.1"}}}
|
package/docs/{runtime~main.b2826aa6.iframe.bundle.js → runtime~main.c8f2837a.iframe.bundle.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>chunkId+"."+{39:"
|
|
1
|
+
(()=>{"use strict";var deferred,leafPrototypes,getProto,inProgress,__webpack_modules__={},__webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(void 0!==cachedModule)return cachedModule.exports;var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:!1,exports:{}};return __webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.loaded=!0,module.exports}__webpack_require__.m=__webpack_modules__,deferred=[],__webpack_require__.O=(result,chunkIds,fn,priority)=>{if(!chunkIds){var notFulfilled=1/0;for(i=0;i<deferred.length;i++){for(var[chunkIds,fn,priority]=deferred[i],fulfilled=!0,j=0;j<chunkIds.length;j++)(!1&priority||notFulfilled>=priority)&&Object.keys(__webpack_require__.O).every((key=>__webpack_require__.O[key](chunkIds[j])))?chunkIds.splice(j--,1):(fulfilled=!1,priority<notFulfilled&&(notFulfilled=priority));if(fulfilled){deferred.splice(i--,1);var r=fn();void 0!==r&&(result=r)}}return result}priority=priority||0;for(var i=deferred.length;i>0&&deferred[i-1][2]>priority;i--)deferred[i]=deferred[i-1];deferred[i]=[chunkIds,fn,priority]},__webpack_require__.n=module=>{var getter=module&&module.__esModule?()=>module.default:()=>module;return __webpack_require__.d(getter,{a:getter}),getter},getProto=Object.getPrototypeOf?obj=>Object.getPrototypeOf(obj):obj=>obj.__proto__,__webpack_require__.t=function(value,mode){if(1&mode&&(value=this(value)),8&mode)return value;if("object"==typeof value&&value){if(4&mode&&value.__esModule)return value;if(16&mode&&"function"==typeof value.then)return value}var ns=Object.create(null);__webpack_require__.r(ns);var def={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var current=2&mode&&value;"object"==typeof current&&!~leafPrototypes.indexOf(current);current=getProto(current))Object.getOwnPropertyNames(current).forEach((key=>def[key]=()=>value[key]));return def.default=()=>value,__webpack_require__.d(ns,def),ns},__webpack_require__.d=(exports,definition)=>{for(var key in definition)__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)&&Object.defineProperty(exports,key,{enumerable:!0,get:definition[key]})},__webpack_require__.f={},__webpack_require__.e=chunkId=>Promise.all(Object.keys(__webpack_require__.f).reduce(((promises,key)=>(__webpack_require__.f[key](chunkId,promises),promises)),[])),__webpack_require__.u=chunkId=>chunkId+"."+{39:"0fa13ab1",247:"6eaf240e",286:"23828fb3",594:"bb1a9f64",651:"3a01b956",690:"46a1e07a",701:"691b9947",935:"19d3d944",962:"ec348c19"}[chunkId]+".iframe.bundle.js",__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.hmd=module=>((module=Object.create(module)).children||(module.children=[]),Object.defineProperty(module,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+module.id)}}),module),__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop),inProgress={},__webpack_require__.l=(url,done,key,chunkId)=>{if(inProgress[url])inProgress[url].push(done);else{var script,needAttach;if(void 0!==key)for(var scripts=document.getElementsByTagName("script"),i=0;i<scripts.length;i++){var s=scripts[i];if(s.getAttribute("src")==url||s.getAttribute("data-webpack")=="@bethinkpl/design-system:"+key){script=s;break}}script||(needAttach=!0,(script=document.createElement("script")).charset="utf-8",script.timeout=120,__webpack_require__.nc&&script.setAttribute("nonce",__webpack_require__.nc),script.setAttribute("data-webpack","@bethinkpl/design-system:"+key),script.src=url),inProgress[url]=[done];var onScriptComplete=(prev,event)=>{script.onerror=script.onload=null,clearTimeout(timeout);var doneFns=inProgress[url];if(delete inProgress[url],script.parentNode&&script.parentNode.removeChild(script),doneFns&&doneFns.forEach((fn=>fn(event))),prev)return prev(event)},timeout=setTimeout(onScriptComplete.bind(null,void 0,{type:"timeout",target:script}),12e4);script.onerror=onScriptComplete.bind(null,script.onerror),script.onload=onScriptComplete.bind(null,script.onload),needAttach&&document.head.appendChild(script)}},__webpack_require__.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.nmd=module=>(module.paths=[],module.children||(module.children=[]),module),__webpack_require__.p="",(()=>{var installedChunks={303:0};__webpack_require__.f.j=(chunkId,promises)=>{var installedChunkData=__webpack_require__.o(installedChunks,chunkId)?installedChunks[chunkId]:void 0;if(0!==installedChunkData)if(installedChunkData)promises.push(installedChunkData[2]);else if(303!=chunkId){var promise=new Promise(((resolve,reject)=>installedChunkData=installedChunks[chunkId]=[resolve,reject]));promises.push(installedChunkData[2]=promise);var url=__webpack_require__.p+__webpack_require__.u(chunkId),error=new Error;__webpack_require__.l(url,(event=>{if(__webpack_require__.o(installedChunks,chunkId)&&(0!==(installedChunkData=installedChunks[chunkId])&&(installedChunks[chunkId]=void 0),installedChunkData)){var errorType=event&&("load"===event.type?"missing":event.type),realSrc=event&&event.target&&event.target.src;error.message="Loading chunk "+chunkId+" failed.\n("+errorType+": "+realSrc+")",error.name="ChunkLoadError",error.type=errorType,error.request=realSrc,installedChunkData[1](error)}}),"chunk-"+chunkId,chunkId)}else installedChunks[chunkId]=0},__webpack_require__.O.j=chunkId=>0===installedChunks[chunkId];var webpackJsonpCallback=(parentChunkLoadingFunction,data)=>{var moduleId,chunkId,[chunkIds,moreModules,runtime]=data,i=0;if(chunkIds.some((id=>0!==installedChunks[id]))){for(moduleId in moreModules)__webpack_require__.o(moreModules,moduleId)&&(__webpack_require__.m[moduleId]=moreModules[moduleId]);if(runtime)var result=runtime(__webpack_require__)}for(parentChunkLoadingFunction&&parentChunkLoadingFunction(data);i<chunkIds.length;i++)chunkId=chunkIds[i],__webpack_require__.o(installedChunks,chunkId)&&installedChunks[chunkId]&&installedChunks[chunkId][0](),installedChunks[chunkId]=0;return __webpack_require__.O(result)},chunkLoadingGlobal=self.webpackChunk_bethinkpl_design_system=self.webpackChunk_bethinkpl_design_system||[];chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null,0)),chunkLoadingGlobal.push=webpackJsonpCallback.bind(null,chunkLoadingGlobal.push.bind(chunkLoadingGlobal))})(),__webpack_require__.nc=void 0})();
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Value } from '../../../utils/type.utils';
|
|
2
|
+
|
|
3
|
+
export const DATE_PICKER_COLORS = {
|
|
4
|
+
NEUTRAL: 'neutral',
|
|
5
|
+
WARNING: 'warning',
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type DatePickerColors = Value<typeof DATE_PICKER_COLORS>;
|
|
9
|
+
|
|
10
|
+
export const DATE_PICKER_STATES = {
|
|
11
|
+
DEFAULT: 'default',
|
|
12
|
+
DISABLED: 'disabled',
|
|
13
|
+
LOADING: 'loading',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type DatePickerStates = Value<typeof DATE_PICKER_STATES>;
|
|
17
|
+
|
|
18
|
+
export const DATE_PICKER_CALENDAR_POSITIONS = {
|
|
19
|
+
TOP: 'top',
|
|
20
|
+
TOP_LEFT: 'top-left',
|
|
21
|
+
TOP_RIGHT: 'top-right',
|
|
22
|
+
BOTTOM: 'bottom',
|
|
23
|
+
BOTTOM_LEFT: 'bottom-left',
|
|
24
|
+
BOTTOM_RIGHT: 'bottom-right',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type DatePickerCalendarPositions = Value<typeof DATE_PICKER_CALENDAR_POSITIONS>;
|
|
28
|
+
export const DATE_PICKER_TRIGGER_TYPES = {
|
|
29
|
+
BOX: 'box',
|
|
30
|
+
TILE: 'tile',
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type DatePickerTriggerTypes = Value<typeof DATE_PICKER_TRIGGER_TYPES>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import DatePicker from './DatePicker.vue';
|
|
2
|
+
import {
|
|
3
|
+
DATE_PICKER_CALENDAR_POSITIONS,
|
|
4
|
+
DATE_PICKER_COLORS,
|
|
5
|
+
DATE_PICKER_STATES,
|
|
6
|
+
DATE_PICKER_TRIGGER_TYPES,
|
|
7
|
+
} from './DatePicker.consts';
|
|
8
|
+
import { Args, ArgTypes, Meta, StoryFn } from '@storybook/vue3';
|
|
9
|
+
import { ICONS } from '../../Icons/Icon';
|
|
10
|
+
import DsSwitch from '../../Switch';
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
title: 'Components/DatePickers/DatePicker',
|
|
14
|
+
component: DatePicker,
|
|
15
|
+
} as Meta<typeof DatePicker>;
|
|
16
|
+
|
|
17
|
+
const StoryTemplate: StoryFn<typeof DatePicker> = (args, { updateArgs }) => ({
|
|
18
|
+
components: { DatePicker, DsSwitch },
|
|
19
|
+
setup() {
|
|
20
|
+
return {
|
|
21
|
+
...args,
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
data() {
|
|
25
|
+
return {
|
|
26
|
+
ICONS: Object.freeze(ICONS),
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
methods: {
|
|
30
|
+
updateDate(date: Date) {
|
|
31
|
+
updateArgs({
|
|
32
|
+
date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
computed: {
|
|
37
|
+
formattedDate() {
|
|
38
|
+
if (!this.date) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return new Date(this.date);
|
|
42
|
+
},
|
|
43
|
+
formattedMinDate() {
|
|
44
|
+
if (!this.minDate) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return new Date(this.minDate);
|
|
48
|
+
},
|
|
49
|
+
formattedMaxDate() {
|
|
50
|
+
if (!this.maxDate) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return new Date(this.maxDate);
|
|
54
|
+
},
|
|
55
|
+
formattedDisableDates() {
|
|
56
|
+
if (!this.disableDates || !this.disableDates.length) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return this.disableDates.map((date) => new Date(date));
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
template: `
|
|
63
|
+
<date-picker
|
|
64
|
+
:trigger-type="triggerType"
|
|
65
|
+
:is-interactive="isInteractive"
|
|
66
|
+
:placeholder="placeholder"
|
|
67
|
+
:date="formattedDate"
|
|
68
|
+
:label="label"
|
|
69
|
+
:is-label-uppercase="isLabelUppercase"
|
|
70
|
+
:icon="icon ? ICONS[icon] : null"
|
|
71
|
+
:is-icon-hidden-on-mobile="isIconHiddenOnMobile"
|
|
72
|
+
:calendar-position="calendarPosition"
|
|
73
|
+
:error-message="errorMessage"
|
|
74
|
+
:state="state"
|
|
75
|
+
:color="color"
|
|
76
|
+
:disable-dates="formattedDisableDates"
|
|
77
|
+
:min-date="formattedMinDate"
|
|
78
|
+
:max-date="formattedMaxDate"
|
|
79
|
+
@update:date="updateDate"
|
|
80
|
+
>
|
|
81
|
+
<ds-switch label-left="lewa" label-right="prawa" />
|
|
82
|
+
</date-picker>`,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const Interactive = StoryTemplate.bind({});
|
|
86
|
+
const now = Date.now();
|
|
87
|
+
const oneDayMili = 86400000;
|
|
88
|
+
const args = {
|
|
89
|
+
triggerType: DATE_PICKER_TRIGGER_TYPES.TILE,
|
|
90
|
+
isInteractive: true,
|
|
91
|
+
placeholder: 'Wybierz datę',
|
|
92
|
+
date: '',
|
|
93
|
+
label: 'Date picker',
|
|
94
|
+
isLabelUppercase: false,
|
|
95
|
+
icon: 'FA_CALENDAR_DAY',
|
|
96
|
+
isIconHiddenOnMobile: false,
|
|
97
|
+
calendarPosition: DATE_PICKER_CALENDAR_POSITIONS.BOTTOM,
|
|
98
|
+
errorMessage: '',
|
|
99
|
+
state: DATE_PICKER_STATES.DEFAULT,
|
|
100
|
+
color: DATE_PICKER_COLORS.NEUTRAL,
|
|
101
|
+
disableDates: [new Date(now + oneDayMili * 2).toISOString().slice(0, 10)],
|
|
102
|
+
minDate: new Date(now).toISOString().slice(0, 10),
|
|
103
|
+
maxDate: new Date(now + oneDayMili * 30).toISOString().slice(0, 10),
|
|
104
|
+
} as Args;
|
|
105
|
+
|
|
106
|
+
const argTypes = {
|
|
107
|
+
triggerType: {
|
|
108
|
+
control: 'select',
|
|
109
|
+
options: Object.values(DATE_PICKER_TRIGGER_TYPES),
|
|
110
|
+
},
|
|
111
|
+
date: { control: 'text' },
|
|
112
|
+
icon: { control: 'select', options: [null, ...Object.keys(ICONS)] },
|
|
113
|
+
calendarPosition: {
|
|
114
|
+
control: 'select',
|
|
115
|
+
options: Object.values(DATE_PICKER_CALENDAR_POSITIONS),
|
|
116
|
+
},
|
|
117
|
+
state: {
|
|
118
|
+
control: 'select',
|
|
119
|
+
options: Object.values(DATE_PICKER_STATES),
|
|
120
|
+
},
|
|
121
|
+
color: {
|
|
122
|
+
control: 'select',
|
|
123
|
+
options: Object.values(DATE_PICKER_COLORS),
|
|
124
|
+
},
|
|
125
|
+
disableDates: {
|
|
126
|
+
control: 'array',
|
|
127
|
+
},
|
|
128
|
+
} as ArgTypes;
|
|
129
|
+
|
|
130
|
+
Interactive.argTypes = argTypes;
|
|
131
|
+
Interactive.args = args;
|
|
132
|
+
|
|
133
|
+
Interactive.parameters = {
|
|
134
|
+
design: {
|
|
135
|
+
type: 'figma',
|
|
136
|
+
url: 'https://www.figma.com/design/03ABNCSDYWYDmOPJOBGM5l/INI-153-Planowanie-pracy-z-lekcjami?node-id=245-162031&t=g08nj70xhT9BZTpu-4',
|
|
137
|
+
},
|
|
138
|
+
};
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="ds-datePicker"
|
|
4
|
+
:class="{ '-ds-box': triggerType === DATE_PICKER_TRIGGER_TYPES.BOX }"
|
|
5
|
+
>
|
|
6
|
+
<template v-if="triggerType === DATE_PICKER_TRIGGER_TYPES.TILE">
|
|
7
|
+
<div class="ds-datePicker__labelWrapper">
|
|
8
|
+
<span
|
|
9
|
+
v-if="label"
|
|
10
|
+
class="ds-datePicker__label"
|
|
11
|
+
:class="{
|
|
12
|
+
'-ds-isUppercase': isLabelUppercase,
|
|
13
|
+
'-ds-disabled': state === DATE_PICKER_STATES.DISABLED,
|
|
14
|
+
}"
|
|
15
|
+
>{{ label }}</span
|
|
16
|
+
>
|
|
17
|
+
<template v-if="$slots.default">
|
|
18
|
+
<slot />
|
|
19
|
+
</template>
|
|
20
|
+
</div>
|
|
21
|
+
<ds-tile
|
|
22
|
+
class="ds-datePicker__tile"
|
|
23
|
+
:text="text"
|
|
24
|
+
:interactive="isInteractive"
|
|
25
|
+
:color="color"
|
|
26
|
+
:state="state"
|
|
27
|
+
:icon-right="tileIcon"
|
|
28
|
+
:is-icon-right-hidden-on-mobile="isIconHiddenOnMobile"
|
|
29
|
+
:eyebrow-text="eyebrowText"
|
|
30
|
+
@click="toggle"
|
|
31
|
+
/>
|
|
32
|
+
</template>
|
|
33
|
+
<date-picker-box
|
|
34
|
+
v-else
|
|
35
|
+
:is-interactive="isInteractive"
|
|
36
|
+
:placeholder="placeholder"
|
|
37
|
+
:date="date"
|
|
38
|
+
:icon="icon"
|
|
39
|
+
:is-icon-hidden-on-mobile="isIconHiddenOnMobile"
|
|
40
|
+
:state="state"
|
|
41
|
+
:color="color"
|
|
42
|
+
:eyebrow-text="eyebrowText"
|
|
43
|
+
:is-open="isOpen"
|
|
44
|
+
@click="toggle"
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
<span v-if="errorMessage" class="ds-datePicker__errorMessage"> {{ errorMessage }} </span>
|
|
48
|
+
<input ref="flatpickrInput" class="ds-datePicker__hiddenInput" />
|
|
49
|
+
</div>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<style lang="scss">
|
|
53
|
+
@import 'flatpickr/dist/flatpickr';
|
|
54
|
+
</style>
|
|
55
|
+
|
|
56
|
+
<style lang="scss" scoped>
|
|
57
|
+
@import '../../../../styles/settings/typography/tokens';
|
|
58
|
+
@import '../../../../styles/settings/colors/tokens';
|
|
59
|
+
@import '../../../../styles/settings/spacings';
|
|
60
|
+
|
|
61
|
+
.ds-datePicker {
|
|
62
|
+
$self: &;
|
|
63
|
+
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
row-gap: $space-4xs;
|
|
67
|
+
|
|
68
|
+
&.-ds-box {
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
&__hiddenInput {
|
|
73
|
+
display: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&__labelWrapper {
|
|
77
|
+
align-items: flex-end;
|
|
78
|
+
display: flex;
|
|
79
|
+
justify-content: space-between;
|
|
80
|
+
padding-bottom: $space-2xs;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&__label {
|
|
84
|
+
@include label-l-default-bold;
|
|
85
|
+
|
|
86
|
+
color: $color-neutral-text-strong;
|
|
87
|
+
|
|
88
|
+
&.-ds-isUppercase {
|
|
89
|
+
@include label-m-extensive-bold-uppercase;
|
|
90
|
+
|
|
91
|
+
color: $color-neutral-text;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&.-ds-disabled {
|
|
95
|
+
color: $color-neutral-text-strong-disabled;
|
|
96
|
+
|
|
97
|
+
&.-ds-isUppercase {
|
|
98
|
+
color: $color-neutral-text-disabled;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&__tile {
|
|
104
|
+
min-height: 56px;
|
|
105
|
+
|
|
106
|
+
/* Prevent text select */
|
|
107
|
+
-webkit-user-select: none; /* Safari */
|
|
108
|
+
user-select: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&__errorMessage {
|
|
112
|
+
@include info-s-default-regular;
|
|
113
|
+
|
|
114
|
+
color: $color-danger-text;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
</style>
|
|
118
|
+
|
|
119
|
+
<script lang="ts">
|
|
120
|
+
import { PropType, toRaw } from 'vue';
|
|
121
|
+
|
|
122
|
+
import DsTile from '../../Tile';
|
|
123
|
+
import { ICONS } from '../../Icons/Icon';
|
|
124
|
+
import DatePickerBox from '../DatePickerBox';
|
|
125
|
+
|
|
126
|
+
import {
|
|
127
|
+
DATE_PICKER_CALENDAR_POSITIONS,
|
|
128
|
+
DATE_PICKER_COLORS,
|
|
129
|
+
DATE_PICKER_STATES,
|
|
130
|
+
DATE_PICKER_TRIGGER_TYPES,
|
|
131
|
+
DatePickerCalendarPositions,
|
|
132
|
+
DatePickerColors,
|
|
133
|
+
DatePickerStates,
|
|
134
|
+
DatePickerTriggerTypes,
|
|
135
|
+
} from './DatePicker.consts';
|
|
136
|
+
import { capitalizeFirstLetter } from '../../../../../tools/importers/helpers/modifiers';
|
|
137
|
+
|
|
138
|
+
let flatpickr: Function | null = null;
|
|
139
|
+
|
|
140
|
+
const FLATPICKR_POSITIONS = {
|
|
141
|
+
[DATE_PICKER_CALENDAR_POSITIONS.BOTTOM_LEFT]: 'below left',
|
|
142
|
+
[DATE_PICKER_CALENDAR_POSITIONS.BOTTOM_RIGHT]: 'below right',
|
|
143
|
+
[DATE_PICKER_CALENDAR_POSITIONS.BOTTOM]: 'below',
|
|
144
|
+
[DATE_PICKER_CALENDAR_POSITIONS.TOP_LEFT]: 'above left',
|
|
145
|
+
[DATE_PICKER_CALENDAR_POSITIONS.TOP_RIGHT]: 'above right',
|
|
146
|
+
[DATE_PICKER_CALENDAR_POSITIONS.TOP]: 'above',
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default {
|
|
150
|
+
name: 'DatePicker',
|
|
151
|
+
components: {
|
|
152
|
+
DatePickerBox,
|
|
153
|
+
DsTile,
|
|
154
|
+
},
|
|
155
|
+
props: {
|
|
156
|
+
triggerType: {
|
|
157
|
+
type: String as PropType<DatePickerTriggerTypes>,
|
|
158
|
+
default: DATE_PICKER_TRIGGER_TYPES.TILE,
|
|
159
|
+
},
|
|
160
|
+
isInteractive: {
|
|
161
|
+
type: Boolean,
|
|
162
|
+
default: true,
|
|
163
|
+
},
|
|
164
|
+
placeholder: {
|
|
165
|
+
type: String,
|
|
166
|
+
default: 'Wybierz datę',
|
|
167
|
+
},
|
|
168
|
+
date: {
|
|
169
|
+
type: Date,
|
|
170
|
+
default: null,
|
|
171
|
+
},
|
|
172
|
+
label: {
|
|
173
|
+
type: String,
|
|
174
|
+
default: '',
|
|
175
|
+
},
|
|
176
|
+
isLabelUppercase: {
|
|
177
|
+
type: Boolean,
|
|
178
|
+
default: false,
|
|
179
|
+
},
|
|
180
|
+
icon: {
|
|
181
|
+
type: [Object, null],
|
|
182
|
+
default: ICONS.FA_CALENDAR_DAY,
|
|
183
|
+
validate: (icon) => icon === null || Object.values(ICONS).includes(toRaw(icon)),
|
|
184
|
+
},
|
|
185
|
+
isIconHiddenOnMobile: {
|
|
186
|
+
type: Boolean,
|
|
187
|
+
default: false,
|
|
188
|
+
},
|
|
189
|
+
calendarPosition: {
|
|
190
|
+
type: String as PropType<DatePickerCalendarPositions>,
|
|
191
|
+
default: DATE_PICKER_CALENDAR_POSITIONS.BOTTOM_LEFT,
|
|
192
|
+
},
|
|
193
|
+
errorMessage: {
|
|
194
|
+
type: String,
|
|
195
|
+
default: '',
|
|
196
|
+
},
|
|
197
|
+
state: {
|
|
198
|
+
type: (String as PropType<DatePickerStates>) || null,
|
|
199
|
+
default: DATE_PICKER_STATES.DEFAULT,
|
|
200
|
+
},
|
|
201
|
+
color: {
|
|
202
|
+
type: String as PropType<DatePickerColors>,
|
|
203
|
+
default: DATE_PICKER_COLORS.NEUTRAL,
|
|
204
|
+
},
|
|
205
|
+
disableDates: {
|
|
206
|
+
type: Array,
|
|
207
|
+
default: () => [],
|
|
208
|
+
},
|
|
209
|
+
minDate: {
|
|
210
|
+
type: Date,
|
|
211
|
+
default: null,
|
|
212
|
+
},
|
|
213
|
+
maxDate: {
|
|
214
|
+
type: Date,
|
|
215
|
+
default: null,
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
emits: { 'update:date': () => true },
|
|
219
|
+
data() {
|
|
220
|
+
return {
|
|
221
|
+
datePicker: null,
|
|
222
|
+
isOpen: false,
|
|
223
|
+
DATE_PICKER_STATES: Object.freeze(DATE_PICKER_STATES),
|
|
224
|
+
DATE_PICKER_TRIGGER_TYPES: Object.freeze(DATE_PICKER_TRIGGER_TYPES),
|
|
225
|
+
};
|
|
226
|
+
},
|
|
227
|
+
computed: {
|
|
228
|
+
isDatePickerEnabled() {
|
|
229
|
+
return this.isInteractive && this.state === DATE_PICKER_STATES.DEFAULT;
|
|
230
|
+
},
|
|
231
|
+
eyebrowText() {
|
|
232
|
+
if (!this.date || this.state === DATE_PICKER_STATES.LOADING) {
|
|
233
|
+
return '';
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return capitalizeFirstLetter(
|
|
237
|
+
this.date.toLocaleDateString(undefined, {
|
|
238
|
+
dateStyle: undefined,
|
|
239
|
+
timeStyle: undefined,
|
|
240
|
+
weekday: 'long',
|
|
241
|
+
}),
|
|
242
|
+
);
|
|
243
|
+
},
|
|
244
|
+
text() {
|
|
245
|
+
if (this.state === DATE_PICKER_STATES.LOADING || !this.date) {
|
|
246
|
+
return this.placeholder;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return this.date.toLocaleDateString(undefined, {
|
|
250
|
+
dateStyle: 'medium',
|
|
251
|
+
timeStyle: undefined,
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
tileIcon() {
|
|
255
|
+
if (!this.icon) {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return this.isOpen ? ICONS.FA_CHEVRON_UP : this.icon;
|
|
260
|
+
},
|
|
261
|
+
flatpickrConfigString() {
|
|
262
|
+
return [
|
|
263
|
+
this.maxDate,
|
|
264
|
+
this.minDate,
|
|
265
|
+
this.calendarPosition,
|
|
266
|
+
this.date,
|
|
267
|
+
...this.disableDates,
|
|
268
|
+
].concat('|');
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
watch: {
|
|
272
|
+
flatpickrConfigString: {
|
|
273
|
+
handler() {
|
|
274
|
+
this.datePicker?.set({
|
|
275
|
+
position: FLATPICKR_POSITIONS[this.calendarPosition],
|
|
276
|
+
defaultDate: this.date,
|
|
277
|
+
disable: this.disableDates.filter((date) => date instanceof Date),
|
|
278
|
+
minDate: this.minDate,
|
|
279
|
+
maxDate: this.maxDate,
|
|
280
|
+
});
|
|
281
|
+
},
|
|
282
|
+
flush: 'post' as const,
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
async mounted() {
|
|
286
|
+
if (this.isDatePickerEnabled && !this.datePicker) {
|
|
287
|
+
if (!flatpickr) {
|
|
288
|
+
const { default: flatpickrFunction } = await import('flatpickr');
|
|
289
|
+
|
|
290
|
+
flatpickr = flatpickrFunction;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const { Polish } = await import('flatpickr/dist/l10n/pl.js');
|
|
294
|
+
|
|
295
|
+
this.datePicker = flatpickr(this.$refs.flatpickrInput, {
|
|
296
|
+
locale: Polish,
|
|
297
|
+
positionElement: this.$el,
|
|
298
|
+
ignoredFocusElements: [this.$el],
|
|
299
|
+
appendTo: this.$el,
|
|
300
|
+
position: FLATPICKR_POSITIONS[this.calendarPosition],
|
|
301
|
+
defaultDate: this.date,
|
|
302
|
+
disable: this.disableDates.filter((date) => date instanceof Date),
|
|
303
|
+
minDate: this.minDate,
|
|
304
|
+
maxDate: this.maxDate,
|
|
305
|
+
onClose: [
|
|
306
|
+
() => {
|
|
307
|
+
this.isOpen = false;
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
onOpen: [
|
|
311
|
+
() => {
|
|
312
|
+
this.isOpen = true;
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
onChange: (event) => {
|
|
316
|
+
this.$emit('update:date', event[0]);
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
unmounted() {
|
|
322
|
+
this.datePicker?.destroy();
|
|
323
|
+
this.datePicker = null;
|
|
324
|
+
},
|
|
325
|
+
methods: {
|
|
326
|
+
toggle() {
|
|
327
|
+
if (this.isDatePickerEnabled && this.datePicker) {
|
|
328
|
+
this.datePicker.toggle();
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
</script>
|