From 853c453598bcc64cb22c11312ed103368cc2001a Mon Sep 17 00:00:00 2001 From: chenxiao07 Date: Thu, 15 Dec 2016 15:38:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bower.json | 2 +- example/index.js | 8 ++++++++ lib/Calendar.js | 2 +- lib/Calendar.js.map | 2 +- lib/RangeCalendar.js | 2 +- lib/RangeCalendar.js.map | 2 +- lib/index.styl | 18 ++++++++++++------ package.json | 2 +- src/Calendar.js | 2 +- src/RangeCalendar.js | 2 +- src/index.styl | 18 ++++++++++++------ 11 files changed, 40 insertions(+), 20 deletions(-) diff --git a/bower.json b/bower.json index f3ce4af..fc5537d 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "melon-calendar", - "version": "1.0.3", + "version": "1.0.4", "homepage": "http://react-melon.github.io/melon-calendar", "authors": [ "ludafa@outlook.com", diff --git a/example/index.js b/example/index.js index 502263b..3c7521c 100644 --- a/example/index.js +++ b/example/index.js @@ -67,6 +67,14 @@ class View extends React.Component { 2015-7-10 to 2015-9-28 + +
+
+ fluid + +
+
+
自动确定 diff --git a/lib/Calendar.js b/lib/Calendar.js index 9b398d3..333d4ad 100644 --- a/lib/Calendar.js +++ b/lib/Calendar.js @@ -233,7 +233,7 @@ return _react2['default'].createElement( 'div', - babelHelpers['extends']({}, (0, _omit2['default'])(others, ['dateFormat', 'name', 'autoConfirm']), { className: className }), + babelHelpers['extends']({}, (0, _omit2['default'])(others, ['dateFormat', 'name', 'autoConfirm', 'variants']), { className: className }), this.renderHiddenInput(), _react2['default'].createElement( 'label', diff --git a/lib/Calendar.js.map b/lib/Calendar.js.map index dd94b54..18dbf37 100644 --- a/lib/Calendar.js.map +++ b/lib/Calendar.js.map @@ -1 +1 @@ -{"version":3,"sources":["Calendar.js"],"names":["DateTime","cx","Calendar","props","context","value","state","onLabelClick","bind","onConfirm","onCancel","onDateChange","date","parseDate","undefined","open","getSyncUpdates","nextProps","disabled","readOnly","customValidity","defaultValue","isNaN","getTime","Date","vilidity","stringifyValue","rawValue","isDate","dateFormat","format","parse","setState","isEqualDate","newDate","onChange","type","target","e","autoConfirm","renderHiddenInput","name","render","lang","size","placeholder","others","validity","begin","end","className","addStates","focus","getStyleStates","build","part","displayName","LANG","week","days","defaultProps","propTypes","string","bool","oneOfType","object","shape","childContextTypes","contextTypes"],"mappings":"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","file":"Calendar.js","sourcesContent":["/**\n * @file melon/Calendar\n * @author cxtom\n */\n\nimport React, {PropTypes} from 'react';\n\nimport InputComponent from 'melon-core/InputComponent';\nimport {create} from 'melon-core/classname/cxBuilder';\nimport Validity from 'melon-core/Validity';\nimport {getNextValidity} from 'melon-core/util/syncPropsToState';\n\nimport Icon from 'melon/Icon';\nimport Confirm from 'melon/Confirm';\n\nimport Panel from './calendar/Panel';\nimport * as DateTime from './util';\nimport omit from 'lodash/omit';\n\nconst cx = create('Calendar');\n\n\n/**\n * melon 日期选择器\n *\n * @class\n * @extends {melon-core/InputComponent}\n */\nexport default class Calendar extends InputComponent {\n\n /**\n * 构造函数\n *\n * @param {Object} props 组件属性\n * @param {Object} context 组件上下文\n * @public\n */\n constructor(props, context) {\n\n super(props, context);\n\n const value = this.state.value;\n\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onDateChange = this.onDateChange.bind(this);\n\n /**\n * 组件状态\n *\n * @type {Object}\n */\n this.state = {\n\n ...this.state,\n\n // 缓存用户在 confirm 前的选中值\n date: value ? this.parseDate(value) : undefined,\n\n // 是否打开选择窗\n open: false\n\n };\n\n }\n\n /**\n * 组件每次更新 (componentWillRecieveProps) 时,需要\n * 更新组件状态,包括校验信息、同步 date 和 value\n *\n * @param {Object} nextProps 组件更新的属性\n * @return {Object} 最新的组件状态\n * @public\n */\n getSyncUpdates(nextProps) {\n\n const {disabled, readOnly, customValidity, defaultValue} = nextProps;\n\n let value = nextProps.value ? nextProps.value : defaultValue;\n\n // 如果有值,那么就试着解析一下;否则设置为 null\n let date = value ? this.parseDate(value) : null;\n\n // 如果 date 为 null 或者是 invalid date,那么就用上默认值;\n // 否则就用解析出来的这个值\n date = !date || isNaN(date.getTime()) ? new Date() : date;\n\n const vilidity = getNextValidity(this, {value, disabled, customValidity});\n\n return {\n date,\n vilidity,\n value: (disabled || readOnly || !value) ? value : this.stringifyValue(date)\n };\n }\n\n /**\n * 格式化日期\n *\n * @param {Date} rawValue 源日期对象\n * @param {string=} format 日期格式,默认为当前实例的dateFormat\n * @return {string} 格式化后的日期字符串\n * @private\n */\n stringifyValue(rawValue) {\n\n if (!DateTime.isDate(rawValue)) {\n return rawValue;\n }\n\n const dateFormat = this.props.dateFormat;\n return DateTime.format(rawValue, dateFormat);\n }\n\n /**\n * 格式化日期对象\n *\n * @param {string} date 日期字符串\n * @return {Date} 转化后的日期对象\n * @private\n */\n parseDate(date) {\n\n if (typeof date !== 'string') {\n return date;\n }\n\n let format = this.props.dateFormat;\n\n return DateTime.parse(date, format);\n }\n\n /**\n * 点击 Label 时触发,打开弹窗\n *\n * @private\n */\n onLabelClick() {\n\n const {disabled, readOnly} = this.props;\n\n if (disabled || readOnly) {\n return;\n }\n\n this.setState({open: true});\n }\n\n /**\n * 在浮层上点击确定按钮时触发\n *\n * @private\n */\n onConfirm() {\n\n let {value, date} = this.state;\n\n value = this.parseDate(value);\n\n if (value && DateTime.isEqualDate(date, this.parseDate(value))) {\n this.setState({open: false});\n return;\n }\n\n const newDate = date ? date : new Date();\n\n this.setState({open: false, date: newDate}, () => {\n\n super.onChange({\n type: 'change',\n target: this,\n value: this.stringifyValue(newDate)\n });\n\n });\n\n }\n\n /**\n * 在浮层上点击取消按钮时触发\n *\n * @private\n */\n onCancel() {\n this.setState({open: false});\n }\n\n /**\n * CalendarPanel 日期变更时触发\n * 当属性 autoConfirm 为 true 时,自动执行 onConfirm\n *\n * @param {Object} e 事件对象\n * @param {Date} e.value 改变后的日期值\n * @private\n */\n onDateChange(e) {\n\n const value = e.value;\n\n this.setState(\n {date: this.parseDate(value)},\n this.props.autoConfirm ? () => this.onConfirm() : null\n );\n }\n\n /**\n * 渲染input\n *\n * @protected\n * @return {ReactElement}\n */\n renderHiddenInput() {\n\n const {name, value} = this.props;\n\n return name\n ? (\n \n )\n : null;\n\n }\n\n /**\n * 渲染\n *\n * @public\n * @return {React.Element}\n */\n render() {\n\n const {\n state,\n props\n } = this;\n\n const {\n lang,\n disabled,\n readOnly,\n size,\n placeholder,\n ...others\n } = props;\n\n const {value, validity} = state;\n\n let {begin, end} = props;\n\n begin = begin ? this.parseDate(begin) : null;\n end = end ? this.parseDate(end) : null;\n\n const {open, date} = state;\n const className = cx(props)\n .addStates({focus: open})\n .addStates(this.getStyleStates())\n .build();\n\n return (\n
\n {this.renderHiddenInput()}\n \n \n \n \n \n
\n );\n\n }\n\n}\n\nCalendar.displayName = 'Calendar';\n\nCalendar.LANG = {\n\n // 对于 '周' 的称呼\n week: '周',\n\n // 星期对应的顺序表示\n days: '日,一,二,三,四,五,六'\n\n};\n\nCalendar.defaultProps = {\n ...InputComponent.defaultProps,\n dateFormat: 'YYYY-MM-DD',\n lang: Calendar.LANG,\n placeholder: '请选择'\n};\n\nCalendar.propTypes = {\n\n ...InputComponent.propTypes,\n\n value: PropTypes.string,\n\n autoConfirm: PropTypes.bool,\n\n dateFormat: PropTypes.string,\n\n end: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n\n begin: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n\n lang: PropTypes.shape({\n week: PropTypes.string,\n days: PropTypes.string\n })\n\n};\n\nCalendar.childContextTypes = InputComponent.childContextTypes;\n\nCalendar.contextTypes = InputComponent.contextTypes;\n"]} \ No newline at end of file +{"version":3,"sources":["Calendar.js"],"names":["DateTime","cx","Calendar","props","context","value","state","onLabelClick","bind","onConfirm","onCancel","onDateChange","date","parseDate","undefined","open","getSyncUpdates","nextProps","disabled","readOnly","customValidity","defaultValue","isNaN","getTime","Date","vilidity","stringifyValue","rawValue","isDate","dateFormat","format","parse","setState","isEqualDate","newDate","onChange","type","target","e","autoConfirm","renderHiddenInput","name","render","lang","size","placeholder","others","validity","begin","end","className","addStates","focus","getStyleStates","build","part","displayName","LANG","week","days","defaultProps","propTypes","string","bool","oneOfType","object","shape","childContextTypes","contextTypes"],"mappings":"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","file":"Calendar.js","sourcesContent":["/**\n * @file melon/Calendar\n * @author cxtom\n */\n\nimport React, {PropTypes} from 'react';\n\nimport InputComponent from 'melon-core/InputComponent';\nimport {create} from 'melon-core/classname/cxBuilder';\nimport Validity from 'melon-core/Validity';\nimport {getNextValidity} from 'melon-core/util/syncPropsToState';\n\nimport Icon from 'melon/Icon';\nimport Confirm from 'melon/Confirm';\n\nimport Panel from './calendar/Panel';\nimport * as DateTime from './util';\nimport omit from 'lodash/omit';\n\nconst cx = create('Calendar');\n\n\n/**\n * melon 日期选择器\n *\n * @class\n * @extends {melon-core/InputComponent}\n */\nexport default class Calendar extends InputComponent {\n\n /**\n * 构造函数\n *\n * @param {Object} props 组件属性\n * @param {Object} context 组件上下文\n * @public\n */\n constructor(props, context) {\n\n super(props, context);\n\n const value = this.state.value;\n\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onDateChange = this.onDateChange.bind(this);\n\n /**\n * 组件状态\n *\n * @type {Object}\n */\n this.state = {\n\n ...this.state,\n\n // 缓存用户在 confirm 前的选中值\n date: value ? this.parseDate(value) : undefined,\n\n // 是否打开选择窗\n open: false\n\n };\n\n }\n\n /**\n * 组件每次更新 (componentWillRecieveProps) 时,需要\n * 更新组件状态,包括校验信息、同步 date 和 value\n *\n * @param {Object} nextProps 组件更新的属性\n * @return {Object} 最新的组件状态\n * @public\n */\n getSyncUpdates(nextProps) {\n\n const {disabled, readOnly, customValidity, defaultValue} = nextProps;\n\n let value = nextProps.value ? nextProps.value : defaultValue;\n\n // 如果有值,那么就试着解析一下;否则设置为 null\n let date = value ? this.parseDate(value) : null;\n\n // 如果 date 为 null 或者是 invalid date,那么就用上默认值;\n // 否则就用解析出来的这个值\n date = !date || isNaN(date.getTime()) ? new Date() : date;\n\n const vilidity = getNextValidity(this, {value, disabled, customValidity});\n\n return {\n date,\n vilidity,\n value: (disabled || readOnly || !value) ? value : this.stringifyValue(date)\n };\n }\n\n /**\n * 格式化日期\n *\n * @param {Date} rawValue 源日期对象\n * @param {string=} format 日期格式,默认为当前实例的dateFormat\n * @return {string} 格式化后的日期字符串\n * @private\n */\n stringifyValue(rawValue) {\n\n if (!DateTime.isDate(rawValue)) {\n return rawValue;\n }\n\n const dateFormat = this.props.dateFormat;\n return DateTime.format(rawValue, dateFormat);\n }\n\n /**\n * 格式化日期对象\n *\n * @param {string} date 日期字符串\n * @return {Date} 转化后的日期对象\n * @private\n */\n parseDate(date) {\n\n if (typeof date !== 'string') {\n return date;\n }\n\n let format = this.props.dateFormat;\n\n return DateTime.parse(date, format);\n }\n\n /**\n * 点击 Label 时触发,打开弹窗\n *\n * @private\n */\n onLabelClick() {\n\n const {disabled, readOnly} = this.props;\n\n if (disabled || readOnly) {\n return;\n }\n\n this.setState({open: true});\n }\n\n /**\n * 在浮层上点击确定按钮时触发\n *\n * @private\n */\n onConfirm() {\n\n let {value, date} = this.state;\n\n value = this.parseDate(value);\n\n if (value && DateTime.isEqualDate(date, this.parseDate(value))) {\n this.setState({open: false});\n return;\n }\n\n const newDate = date ? date : new Date();\n\n this.setState({open: false, date: newDate}, () => {\n\n super.onChange({\n type: 'change',\n target: this,\n value: this.stringifyValue(newDate)\n });\n\n });\n\n }\n\n /**\n * 在浮层上点击取消按钮时触发\n *\n * @private\n */\n onCancel() {\n this.setState({open: false});\n }\n\n /**\n * CalendarPanel 日期变更时触发\n * 当属性 autoConfirm 为 true 时,自动执行 onConfirm\n *\n * @param {Object} e 事件对象\n * @param {Date} e.value 改变后的日期值\n * @private\n */\n onDateChange(e) {\n\n const value = e.value;\n\n this.setState(\n {date: this.parseDate(value)},\n this.props.autoConfirm ? () => this.onConfirm() : null\n );\n }\n\n /**\n * 渲染input\n *\n * @protected\n * @return {ReactElement}\n */\n renderHiddenInput() {\n\n const {name, value} = this.props;\n\n return name\n ? (\n \n )\n : null;\n\n }\n\n /**\n * 渲染\n *\n * @public\n * @return {React.Element}\n */\n render() {\n\n const {\n state,\n props\n } = this;\n\n const {\n lang,\n disabled,\n readOnly,\n size,\n placeholder,\n ...others\n } = props;\n\n const {value, validity} = state;\n\n let {begin, end} = props;\n\n begin = begin ? this.parseDate(begin) : null;\n end = end ? this.parseDate(end) : null;\n\n const {open, date} = state;\n const className = cx(props)\n .addStates({focus: open})\n .addStates(this.getStyleStates())\n .build();\n\n return (\n
\n {this.renderHiddenInput()}\n \n \n \n \n \n
\n );\n\n }\n\n}\n\nCalendar.displayName = 'Calendar';\n\nCalendar.LANG = {\n\n // 对于 '周' 的称呼\n week: '周',\n\n // 星期对应的顺序表示\n days: '日,一,二,三,四,五,六'\n\n};\n\nCalendar.defaultProps = {\n ...InputComponent.defaultProps,\n dateFormat: 'YYYY-MM-DD',\n lang: Calendar.LANG,\n placeholder: '请选择'\n};\n\nCalendar.propTypes = {\n\n ...InputComponent.propTypes,\n\n value: PropTypes.string,\n\n autoConfirm: PropTypes.bool,\n\n dateFormat: PropTypes.string,\n\n end: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n\n begin: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n\n lang: PropTypes.shape({\n week: PropTypes.string,\n days: PropTypes.string\n })\n\n};\n\nCalendar.childContextTypes = InputComponent.childContextTypes;\n\nCalendar.contextTypes = InputComponent.contextTypes;\n"]} \ No newline at end of file diff --git a/lib/RangeCalendar.js b/lib/RangeCalendar.js index 89c5932..499a0ef 100644 --- a/lib/RangeCalendar.js +++ b/lib/RangeCalendar.js @@ -255,7 +255,7 @@ return _react2['default'].createElement( 'div', - babelHelpers['extends']({}, (0, _omit2['default'])(others, ['dateFormat', 'name', 'autoConfirm']), { + babelHelpers['extends']({}, (0, _omit2['default'])(others, ['dateFormat', 'name', 'autoConfirm', 'variants']), { className: className }), this.renderHiddenInput(), _react2['default'].createElement( diff --git a/lib/RangeCalendar.js.map b/lib/RangeCalendar.js.map index 14e9a33..7d00f5c 100644 --- a/lib/RangeCalendar.js.map +++ b/lib/RangeCalendar.js.map @@ -1 +1 @@ -{"version":3,"sources":["RangeCalendar.js"],"names":["DateTime","cx","RangeCalendar","props","context","begin","end","value","state","open","date","getNormalizeValue","onLabelClick","bind","onConfirm","onCancel","onDateChange","getSyncUpdates","nextProps","disabled","customValidity","readOnly","defaultValue","vilidity","length","stringifyValue","Date","parseDate","valueBegin","valueEnd","isAfterDate","isBeforeDate","map","formatDate","setState","index","e","concat","isEqualDate","onChange","type","target","format","dateFormat","parse","renderHiddenInput","name","join","render","lang","size","placeholder","others","validity","className","addStates","focus","getStyleStates","build","part","displayName","defaultProps","propTypes","arrayOf","string","autoOk","bool","oneOfType","object","childContextTypes","contextTypes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAkBYA,Q;;;;AAlBZ;;;;;;AAqBA,QAAMC,KAAK,uBAAO,eAAP,CAAX;;AAEA;;;;;;;QAMqBC,a;;;AAEjB;;;;;;;AAOA,+BAAYC,KAAZ,EAAmBC,OAAnB,EAA4B;AAAA;;AAAA,qEAExB,2BAAMD,KAAN,EAAaC,OAAb,CAFwB;;AAAA,gBAIjBC,KAJiB,GAIHF,KAJG,CAIjBE,KAJiB;AAAA,gBAIVC,GAJU,GAIHH,KAJG,CAIVG,GAJU;;;AAMxB,gBAAMC,QAAQ,MAAKC,KAAL,CAAWD,KAAzB;;AAEA;;;;;AAKA,kBAAKC,KAAL,+BACO,MAAKA,KADZ;AAEIC,sBAAM,KAFV;AAGIC,sBAAM,MAAKC,iBAAL,CAAuBJ,KAAvB,EAA8BF,KAA9B,EAAqCC,GAArC;AAHV;;AAMA,kBAAKM,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,OAApB;AACA,kBAAKC,SAAL,GAAiB,MAAKA,SAAL,CAAeD,IAAf,OAAjB;AACA,kBAAKD,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,OAApB;AACA,kBAAKE,QAAL,GAAgB,MAAKA,QAAL,CAAcF,IAAd,OAAhB;AACA,kBAAKG,YAAL,GAAoB,MAAKA,YAAL,CAAkBH,IAAlB,OAApB;AAvBwB;AAwB3B;;AAED;;;;;;;;;;gCAQAI,c,2BAAeC,S,EAAW;AAAA,gBAGlBC,QAHkB,GASlBD,SATkB,CAGlBC,QAHkB;AAAA,gBAIlBC,cAJkB,GASlBF,SATkB,CAIlBE,cAJkB;AAAA,gBAKlBC,QALkB,GASlBH,SATkB,CAKlBG,QALkB;AAAA,mCASlBH,SATkB,CAMlBX,KANkB;AAAA,gBAMlBA,KANkB,oCAMVW,UAAUI,YANA;AAAA,gBAOlBjB,KAPkB,GASlBa,SATkB,CAOlBb,KAPkB;AAAA,gBAQlBC,GARkB,GASlBY,SATkB,CAQlBZ,GARkB;;;AAWtB;AACA,gBAAII,OAAOH,QAAQ,KAAKI,iBAAL,CAAuBJ,KAAvB,EAA8BF,KAA9B,EAAqCC,GAArC,CAAR,GAAoD,IAA/D;;AAEA,gBAAMiB,WAAW,uCAAgB,IAAhB,EAAsB,EAAChB,YAAD,EAAQY,kBAAR,EAAkBC,8BAAlB,EAAtB,CAAjB;;AAEA,mBAAO;AACHV,0BADG;AAEHa,kCAFG;AAGHhB,uBAAQY,YAAYE,QAAZ,IAAwB,CAACd,MAAMiB,MAAhC,GAA0CjB,KAA1C,GAAkD,KAAKkB,cAAL,CAAoBf,IAApB;AAHtD,aAAP;AAMH,S;;gCAWDC,iB,8BAAkBJ,K,EAAOF,K,EAAOC,G,EAAK;;AAEjC,gBAAIC,MAAMiB,MAAN,KAAiB,CAArB,EAAwB;AACpB,uBAAO,CAAC,IAAIE,IAAJ,EAAD,EAAa,IAAIA,IAAJ,EAAb,CAAP;AACH;;AAEDrB,oBAAQ,KAAKsB,SAAL,CAAetB,KAAf,CAAR;AACAC,kBAAM,KAAKqB,SAAL,CAAerB,GAAf,CAAN;;AAEA,gBAAIsB,aAAa,KAAKD,SAAL,CAAepB,MAAM,CAAN,CAAf,CAAjB;AACA,gBAAIsB,WAAW,KAAKF,SAAL,CAAepB,MAAM,CAAN,CAAf,CAAf;;AAEA;AACAA,oBAAQ,CACJF,SAASL,SAAS8B,WAAT,CAAqBzB,KAArB,EAA4BuB,UAA5B,CAAT,GAAmDvB,KAAnD,GAA2DuB,UADvD,EAEJtB,OAAON,SAAS+B,YAAT,CAAsBzB,GAAtB,EAA2BuB,QAA3B,CAAP,GAA8CvB,GAA9C,GAAoDuB,QAFhD,CAAR;;AAKA,mBAAOtB,KAAP;AAEH,S;;gCASDkB,c,2BAAef,I,EAAM;AAAA;;AACjB,mBAAOA,KAAKsB,GAAL,CAAS;AAAA,uBAAQ,OAAKC,UAAL,CAAgBvB,IAAhB,CAAR;AAAA,aAAT,CAAP;AACH,S;;gCAODE,Y,2BAAe;AAAA,yBAKP,KAAKT,KALE;AAAA,gBAGPgB,QAHO,UAGPA,QAHO;AAAA,gBAIPE,QAJO,UAIPA,QAJO;;;AAOX,gBAAIF,YAAYE,QAAhB,EAA0B;AACtB;AACH;;AAED,iBAAKa,QAAL,CAAc,EAACzB,MAAM,IAAP,EAAd;AACH,S;;gCAODM,Q,uBAAW;AACP,iBAAKmB,QAAL,CAAc;AACVzB,sBAAM;AADI,aAAd;AAGH,S;;gCAWDO,Y,yBAAamB,K,EAAOC,C,EAAG;;AAEnB,gBAAM7B,QAAQ6B,EAAE7B,KAAhB;;AAEA,gBAAIG,OAAO,GAAG2B,MAAH,CAAU,KAAK7B,KAAL,CAAWE,IAArB,CAAX;;AAEAA,iBAAKyB,KAAL,IAAc5B,KAAd;;AAEA,iBAAK2B,QAAL,CAAc;AACVxB;AADU,aAAd;AAGH,S;;gCAODI,S,wBAAY;AAAA;;AAAA,yBAEc,KAAKN,KAFnB;AAAA,gBAEDE,IAFC,UAEDA,IAFC;AAAA,gBAEKH,KAFL,UAEKA,KAFL;;;AAIR;AACA,iBAAK2B,QAAL,CAAc;AACVzB,sBAAM;AADI,aAAd,EAEG,YAAM;;AAEL;AACA,oBACI,CAACT,SAASsC,WAAT,CAAqB5B,KAAK,CAAL,CAArB,EAA8B,OAAKiB,SAAL,CAAepB,MAAM,CAAN,CAAf,CAA9B,CAAD,IACG,CAACP,SAASsC,WAAT,CAAqB5B,KAAK,CAAL,CAArB,EAA8B,OAAKiB,SAAL,CAAepB,MAAM,CAAN,CAAf,CAA9B,CAFR,EAGE;AACE,8CAAMgC,QAAN,cAAe;AACXC,8BAAM,QADK;AAEXC,sCAFW;AAGXlC,+BAAOG,KAAKsB,GAAL,CAAS,OAAKC,UAAd;AAHI,qBAAf;AAKH;AAEJ,aAhBD;AAkBH,S;;gCASDA,U,uBAAWvB,I,EAAM;;AAEb,mBAAOV,SAAS0C,MAAT,CACHhC,IADG,EAEH,KAAKP,KAAL,CAAWwC,UAFR,CAAP;AAIH,S;;gCASDhB,S,sBAAUjB,I,EAAM;;AAEZ,gBAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC1B,uBAAOA,IAAP;AACH;;AAED,gBAAIgC,SAAS,KAAKvC,KAAL,CAAWwC,UAAxB;;AAEA,mBAAO3C,SAAS4C,KAAT,CAAelC,IAAf,EAAqBgC,MAArB,CAAP;AACH,S;;gCAQDG,iB,gCAAoB;AAAA,0BAEM,KAAK1C,KAFX;AAAA,gBAET2C,IAFS,WAETA,IAFS;AAAA,gBAEHvC,KAFG,WAEHA,KAFG;;;AAIhB,mBAAOuC,OAEC;AACI,sBAAMA,IADV;AAEI,sBAAK,QAFT;AAGI,uBAAOvC,MAAMwC,IAAN,CAAW,GAAX,CAHX,GAFD,GAOD,IAPN;AASH,S;;gCAQDC,M,qBAAS;;AAEL,gBAAM7C,QAAQ,KAAKA,KAAnB;;AAFK,gBAKD8C,IALC,GAaD9C,KAbC,CAKD8C,IALC;AAAA,gBAMD9B,QANC,GAaDhB,KAbC,CAMDgB,QANC;AAAA,gBAODE,QAPC,GAaDlB,KAbC,CAODkB,QAPC;AAAA,gBAQD6B,IARC,GAaD/C,KAbC,CAQD+C,IARC;AAAA,gBASD7C,KATC,GAaDF,KAbC,CASDE,KATC;AAAA,gBAUDC,GAVC,GAaDH,KAbC,CAUDG,GAVC;AAAA,gBAWD6C,WAXC,GAaDhD,KAbC,CAWDgD,WAXC;AAAA,gBAYEC,MAZF,wCAaDjD,KAbC;AAAA,0BAeiC,KAAKK,KAftC;AAAA,gBAeEC,IAfF,WAeEA,IAfF;AAAA,gBAeQC,IAfR,WAeQA,IAfR;AAAA,gBAecH,KAfd,WAecA,KAfd;AAAA,gBAeqB8C,QAfrB,WAeqBA,QAfrB;;;AAiBLhD,oBAAQA,QAAQ,KAAKsB,SAAL,CAAetB,KAAf,CAAR,GAAgC,IAAxC;AACAC,kBAAMA,MAAM,KAAKqB,SAAL,CAAerB,GAAf,CAAN,GAA4B,IAAlC;;AAEA,gBAAMgD,YAAYrD,GAAGE,KAAH,EACboD,SADa,CACH,EAACC,OAAO/C,IAAR,EADG,EAEb8C,SAFa,CAEH,KAAKE,cAAL,EAFG,EAGbC,KAHa,EAAlB;;AAKA,mBACI;AAAA;AAAA,4CACQ,uBAAKN,MAAL,EAAa,CAAC,YAAD,EAAe,MAAf,EAAuB,aAAvB,CAAb,CADR;AAEI,+BAAWE,SAFf;AAGK,qBAAKT,iBAAL,EAHL;AAII;AAAA;AAAA,sBAAO,SAAU1B,YAAYE,QAAb,GAAyB,IAAzB,GAAgC,KAAKT,YAArD;AACKL,0BAAMiB,MAAN,KAAiB,CAAjB,GAEO;AAAA;AAAA,0BAAM,WAAWvB,KAAK0D,IAAL,CAAU,mBAAV,EAA+BD,KAA/B,EAAjB;AACKP;AADL,qBAFP,GAKU5C,MAAM,CAAN,CALV,gBAKwBA,MAAM,CAAN,CAN7B;AAQI,0EAAM,MAAK,aAAX;AARJ,iBAJJ;AAcI,0EAAU,UAAU8C,QAApB,GAdJ;AAeI;AAAA;AAAA;AACI,8BAAM5C,IADV;AAEI,kCAAU,CAAC,UAAD,CAFd;AAGI,mCAAW,KAAKK,SAHpB;AAII,kCAAU,KAAKC,QAJnB;AAKI,8BAAMmC,IALV;AAMI,wCAAgB,CAAC,WAAD,EAAc,UAAd,CANpB;AAOI;AAAA;AAAA,0BAAK,WAAWjD,KAAK0D,IAAL,CAAU,KAAV,EAAiBD,KAAjB,EAAhB;AACI;AACI,kCAAMT,IADV;AAEI,kCAAMvC,KAAK,CAAL,CAFV;AAGI,mCAAOL,KAHX;AAII,iCAAKK,KAAK,CAAL,KAAW,IAAIgB,IAAJ,EAJpB;AAKI,sCAAU,KAAKV,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,EAA6B,CAA7B,CALd,GADJ;AAOI;AACI,kCAAMoC,IADV;AAEI,kCAAMvC,KAAK,CAAL,CAFV;AAGI,mCAAOA,KAAK,CAAL,KAAW,IAAIgB,IAAJ,EAHtB;AAII,iCAAKpB,GAJT;AAKI,sCAAU,KAAKU,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,EAA6B,CAA7B,CALd;AAPJ;AAPJ;AAfJ,aADJ;AAyCH,S;;;;;yBA7TgBX,a;;;AAiUrBA,kBAAc0D,WAAd,GAA4B,eAA5B;;AAEA1D,kBAAc2D,YAAd,+BACO,sBAASA,YADhB;AAEIvC,sBAAc,EAFlB;AAGI6B,qBAAa;AAHjB;;AAMAjD,kBAAc4D,SAAd,+BACO,sBAASA,SADhB;AAEIxC,sBAAc,iBAAUyC,OAAV,CAAkB,iBAAUC,MAA5B,CAFlB;AAGIC,gBAAQ,iBAAUC,IAHtB;AAIIvB,oBAAY,iBAAUqB,MAJ1B;AAKI3D,eAAO,iBAAU8D,SAAV,CAAoB,CACvB,iBAAUC,MADa,EAEvB,iBAAUJ,MAFa,CAApB,CALX;AASI1D,aAAK,iBAAU6D,SAAV,CAAoB,CACrB,iBAAUC,MADW,EAErB,iBAAUJ,MAFW,CAApB;AATT;;AAeA9D,kBAAcmE,iBAAd,GAAkC,4BAAeA,iBAAjD;;AAEAnE,kBAAcoE,YAAd,GAA6B,4BAAeA,YAA5C","file":"RangeCalendar.js","sourcesContent":["/**\n * @file melon/RangeCalendar\n * @author cxtom \n * leon \n */\n\nimport React, {PropTypes} from 'react';\n\nimport Validity from 'melon-core/Validity';\nimport {create} from 'melon-core/classname/cxBuilder';\nimport InputComponent from 'melon-core/InputComponent';\nimport {getNextValidity} from 'melon-core/util/syncPropsToState';\n\nimport Icon from 'melon/Icon';\nimport Confirm from 'melon/Confirm';\n\nimport Calendar from './Calendar';\nimport Panel from './calendar/Panel';\nimport * as DateTime from './util';\nimport omit from 'lodash/omit';\n\nconst cx = create('RangeCalendar');\n\n/**\n * melon 日期区间选择器\n *\n * @class\n * @extends {melon-core/InputComponent}\n */\nexport default class RangeCalendar extends InputComponent {\n\n /**\n * 构造函数\n *\n * @param {Object} props 组件属性\n * @param {Object} context 组件上下文\n * @public\n */\n constructor(props, context) {\n\n super(props, context);\n\n const {begin, end} = props;\n\n const value = this.state.value;\n\n /**\n * 组件状态\n *\n * @type {Object}\n */\n this.state = {\n ...this.state,\n open: false,\n date: this.getNormalizeValue(value, begin, end)\n };\n\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onDateChange = this.onDateChange.bind(this);\n }\n\n /**\n * 组件每次更新 (componentWillRecieveProps) 时,需要\n * 更新组件状态,包括校验信息、同步 date 和 value\n *\n * @param {Object} nextProps 组件更新的属性\n * @return {Object} 最新的组件状态\n * @public\n */\n getSyncUpdates(nextProps) {\n\n const {\n disabled,\n customValidity,\n readOnly,\n value = nextProps.defaultValue,\n begin,\n end\n } = nextProps;\n\n // 如果有值,那么就试着解析一下;否则设置为 null\n let date = value ? this.getNormalizeValue(value, begin, end) : null;\n\n const vilidity = getNextValidity(this, {value, disabled, customValidity});\n\n return {\n date,\n vilidity,\n value: (disabled || readOnly || !value.length) ? value : this.stringifyValue(date)\n };\n\n }\n\n /**\n * 获取过滤后的日期对象区间\n *\n * @param {Array} value 时间区间值\n * @param {string|Date} begin 范围最新值\n * @param {string|Date} end 范围最大值\n * @return {Array} 日期对象区间\n * @private\n */\n getNormalizeValue(value, begin, end) {\n\n if (value.length === 0) {\n return [new Date(), new Date()];\n }\n\n begin = this.parseDate(begin);\n end = this.parseDate(end);\n\n let valueBegin = this.parseDate(value[0]);\n let valueEnd = this.parseDate(value[1]);\n\n // 这里我们需要一个全新的 value\n value = [\n begin && DateTime.isAfterDate(begin, valueBegin) ? begin : valueBegin,\n end && DateTime.isBeforeDate(end, valueEnd) ? end : valueEnd\n ];\n\n return value;\n\n }\n\n /**\n * 格式化日期区间\n *\n * @param {Array} date 源日期对象\n * @return {Array} 格式化后的日期字符串\n * @private\n */\n stringifyValue(date) {\n return date.map(date => this.formatDate(date));\n }\n\n /**\n * 点击 Label 时触发,打开浮层\n *\n * @private\n */\n onLabelClick() {\n\n const {\n disabled,\n readOnly\n } = this.props;\n\n if (disabled || readOnly) {\n return;\n }\n\n this.setState({open: true});\n }\n\n /**\n * 点击取消时触发\n *\n * @private\n */\n onCancel() {\n this.setState({\n open: false\n });\n }\n\n /**\n * CalendarPanel 日期变更时触发\n * 当属性 autoConfirm 为 true 时,自动执行 onConfirm\n *\n * @param {number} index 0 - 开始时间改变, 1 - 结束时间改变\n * @param {Object} e 事件对象\n * @param {Date} e.value 改变后的日期值\n * @private\n */\n onDateChange(index, e) {\n\n const value = e.value;\n\n let date = [].concat(this.state.date);\n\n date[index] = value;\n\n this.setState({\n date\n });\n }\n\n /**\n * 在浮层上点击确定按钮时触发\n *\n * @private\n */\n onConfirm() {\n\n const {date, value} = this.state;\n\n // 不管怎么样,先把窗口关了\n this.setState({\n open: false\n }, () => {\n\n // 如果值发生了变化,那么释放一个 change 事件\n if (\n !DateTime.isEqualDate(date[0], this.parseDate(value[0]))\n || !DateTime.isEqualDate(date[1], this.parseDate(value[1]))\n ) {\n super.onChange({\n type: 'change',\n target: this,\n value: date.map(this.formatDate, this)\n });\n }\n\n });\n\n }\n\n /**\n * 按设置格式化日期\n *\n * @param {Date} date 日期\n * @return {string}\n * @private\n */\n formatDate(date) {\n\n return DateTime.format(\n date,\n this.props.dateFormat\n );\n }\n\n /**\n * 格式化日期对象\n *\n * @param {string} date 日期字符串\n * @return {Date} 转化后的日期对象\n * @private\n */\n parseDate(date) {\n\n if (typeof date !== 'string') {\n return date;\n }\n\n let format = this.props.dateFormat;\n\n return DateTime.parse(date, format);\n }\n\n /**\n * 渲染input\n *\n * @protected\n * @return {ReactElement}\n */\n renderHiddenInput() {\n\n const {name, value} = this.props;\n\n return name\n ? (\n \n )\n : null;\n\n }\n\n /**\n * 渲染\n *\n * @public\n * @return {React.Element}\n */\n render() {\n\n const props = this.props;\n\n let {\n lang,\n disabled,\n readOnly,\n size,\n begin,\n end,\n placeholder,\n ...others\n } = props;\n\n const {open, date, value, validity} = this.state;\n\n begin = begin ? this.parseDate(begin) : null;\n end = end ? this.parseDate(end) : null;\n\n const className = cx(props)\n .addStates({focus: open})\n .addStates(this.getStyleStates())\n .build();\n\n return (\n \n {this.renderHiddenInput()}\n \n \n \n
\n \n \n
\n \n
\n );\n\n }\n\n}\n\nRangeCalendar.displayName = 'RangeCalendar';\n\nRangeCalendar.defaultProps = {\n ...Calendar.defaultProps,\n defaultValue: [],\n placeholder: '请选择'\n};\n\nRangeCalendar.propTypes = {\n ...Calendar.propTypes,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n autoOk: PropTypes.bool,\n dateFormat: PropTypes.string,\n begin: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n end: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ])\n};\n\nRangeCalendar.childContextTypes = InputComponent.childContextTypes;\n\nRangeCalendar.contextTypes = InputComponent.contextTypes;\n"]} \ No newline at end of file +{"version":3,"sources":["RangeCalendar.js"],"names":["DateTime","cx","RangeCalendar","props","context","begin","end","value","state","open","date","getNormalizeValue","onLabelClick","bind","onConfirm","onCancel","onDateChange","getSyncUpdates","nextProps","disabled","customValidity","readOnly","defaultValue","vilidity","length","stringifyValue","Date","parseDate","valueBegin","valueEnd","isAfterDate","isBeforeDate","map","formatDate","setState","index","e","concat","isEqualDate","onChange","type","target","format","dateFormat","parse","renderHiddenInput","name","join","render","lang","size","placeholder","others","validity","className","addStates","focus","getStyleStates","build","part","displayName","defaultProps","propTypes","arrayOf","string","autoOk","bool","oneOfType","object","childContextTypes","contextTypes"],"mappings":"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","file":"RangeCalendar.js","sourcesContent":["/**\n * @file melon/RangeCalendar\n * @author cxtom \n * leon \n */\n\nimport React, {PropTypes} from 'react';\n\nimport Validity from 'melon-core/Validity';\nimport {create} from 'melon-core/classname/cxBuilder';\nimport InputComponent from 'melon-core/InputComponent';\nimport {getNextValidity} from 'melon-core/util/syncPropsToState';\n\nimport Icon from 'melon/Icon';\nimport Confirm from 'melon/Confirm';\n\nimport Calendar from './Calendar';\nimport Panel from './calendar/Panel';\nimport * as DateTime from './util';\nimport omit from 'lodash/omit';\n\nconst cx = create('RangeCalendar');\n\n/**\n * melon 日期区间选择器\n *\n * @class\n * @extends {melon-core/InputComponent}\n */\nexport default class RangeCalendar extends InputComponent {\n\n /**\n * 构造函数\n *\n * @param {Object} props 组件属性\n * @param {Object} context 组件上下文\n * @public\n */\n constructor(props, context) {\n\n super(props, context);\n\n const {begin, end} = props;\n\n const value = this.state.value;\n\n /**\n * 组件状态\n *\n * @type {Object}\n */\n this.state = {\n ...this.state,\n open: false,\n date: this.getNormalizeValue(value, begin, end)\n };\n\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onConfirm = this.onConfirm.bind(this);\n this.onLabelClick = this.onLabelClick.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onDateChange = this.onDateChange.bind(this);\n }\n\n /**\n * 组件每次更新 (componentWillRecieveProps) 时,需要\n * 更新组件状态,包括校验信息、同步 date 和 value\n *\n * @param {Object} nextProps 组件更新的属性\n * @return {Object} 最新的组件状态\n * @public\n */\n getSyncUpdates(nextProps) {\n\n const {\n disabled,\n customValidity,\n readOnly,\n value = nextProps.defaultValue,\n begin,\n end\n } = nextProps;\n\n // 如果有值,那么就试着解析一下;否则设置为 null\n let date = value ? this.getNormalizeValue(value, begin, end) : null;\n\n const vilidity = getNextValidity(this, {value, disabled, customValidity});\n\n return {\n date,\n vilidity,\n value: (disabled || readOnly || !value.length) ? value : this.stringifyValue(date)\n };\n\n }\n\n /**\n * 获取过滤后的日期对象区间\n *\n * @param {Array} value 时间区间值\n * @param {string|Date} begin 范围最新值\n * @param {string|Date} end 范围最大值\n * @return {Array} 日期对象区间\n * @private\n */\n getNormalizeValue(value, begin, end) {\n\n if (value.length === 0) {\n return [new Date(), new Date()];\n }\n\n begin = this.parseDate(begin);\n end = this.parseDate(end);\n\n let valueBegin = this.parseDate(value[0]);\n let valueEnd = this.parseDate(value[1]);\n\n // 这里我们需要一个全新的 value\n value = [\n begin && DateTime.isAfterDate(begin, valueBegin) ? begin : valueBegin,\n end && DateTime.isBeforeDate(end, valueEnd) ? end : valueEnd\n ];\n\n return value;\n\n }\n\n /**\n * 格式化日期区间\n *\n * @param {Array} date 源日期对象\n * @return {Array} 格式化后的日期字符串\n * @private\n */\n stringifyValue(date) {\n return date.map(date => this.formatDate(date));\n }\n\n /**\n * 点击 Label 时触发,打开浮层\n *\n * @private\n */\n onLabelClick() {\n\n const {\n disabled,\n readOnly\n } = this.props;\n\n if (disabled || readOnly) {\n return;\n }\n\n this.setState({open: true});\n }\n\n /**\n * 点击取消时触发\n *\n * @private\n */\n onCancel() {\n this.setState({\n open: false\n });\n }\n\n /**\n * CalendarPanel 日期变更时触发\n * 当属性 autoConfirm 为 true 时,自动执行 onConfirm\n *\n * @param {number} index 0 - 开始时间改变, 1 - 结束时间改变\n * @param {Object} e 事件对象\n * @param {Date} e.value 改变后的日期值\n * @private\n */\n onDateChange(index, e) {\n\n const value = e.value;\n\n let date = [].concat(this.state.date);\n\n date[index] = value;\n\n this.setState({\n date\n });\n }\n\n /**\n * 在浮层上点击确定按钮时触发\n *\n * @private\n */\n onConfirm() {\n\n const {date, value} = this.state;\n\n // 不管怎么样,先把窗口关了\n this.setState({\n open: false\n }, () => {\n\n // 如果值发生了变化,那么释放一个 change 事件\n if (\n !DateTime.isEqualDate(date[0], this.parseDate(value[0]))\n || !DateTime.isEqualDate(date[1], this.parseDate(value[1]))\n ) {\n super.onChange({\n type: 'change',\n target: this,\n value: date.map(this.formatDate, this)\n });\n }\n\n });\n\n }\n\n /**\n * 按设置格式化日期\n *\n * @param {Date} date 日期\n * @return {string}\n * @private\n */\n formatDate(date) {\n\n return DateTime.format(\n date,\n this.props.dateFormat\n );\n }\n\n /**\n * 格式化日期对象\n *\n * @param {string} date 日期字符串\n * @return {Date} 转化后的日期对象\n * @private\n */\n parseDate(date) {\n\n if (typeof date !== 'string') {\n return date;\n }\n\n let format = this.props.dateFormat;\n\n return DateTime.parse(date, format);\n }\n\n /**\n * 渲染input\n *\n * @protected\n * @return {ReactElement}\n */\n renderHiddenInput() {\n\n const {name, value} = this.props;\n\n return name\n ? (\n \n )\n : null;\n\n }\n\n /**\n * 渲染\n *\n * @public\n * @return {React.Element}\n */\n render() {\n\n const props = this.props;\n\n let {\n lang,\n disabled,\n readOnly,\n size,\n begin,\n end,\n placeholder,\n ...others\n } = props;\n\n const {open, date, value, validity} = this.state;\n\n begin = begin ? this.parseDate(begin) : null;\n end = end ? this.parseDate(end) : null;\n\n const className = cx(props)\n .addStates({focus: open})\n .addStates(this.getStyleStates())\n .build();\n\n return (\n \n {this.renderHiddenInput()}\n \n \n \n
\n \n \n
\n \n
\n );\n\n }\n\n}\n\nRangeCalendar.displayName = 'RangeCalendar';\n\nRangeCalendar.defaultProps = {\n ...Calendar.defaultProps,\n defaultValue: [],\n placeholder: '请选择'\n};\n\nRangeCalendar.propTypes = {\n ...Calendar.propTypes,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n autoOk: PropTypes.bool,\n dateFormat: PropTypes.string,\n begin: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ]),\n end: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string\n ])\n};\n\nRangeCalendar.childContextTypes = InputComponent.childContextTypes;\n\nRangeCalendar.contextTypes = InputComponent.contextTypes;\n"]} \ No newline at end of file diff --git a/lib/index.styl b/lib/index.styl index 212e9c6..ad395c3 100644 --- a/lib/index.styl +++ b/lib/index.styl @@ -33,7 +33,9 @@ for level, value in $-melon-calendar-sizes font-size: $-melon-medium-font-size display: inline-block position: relative - margin-right: 1.2em + + border-bottom: 1px solid $-melon-colors.grey300 + transition: border-color 1s &-label-placeholder color: $-melon-colors.grey500 @@ -42,17 +44,21 @@ for level, value in $-melon-calendar-sizes display inline-block font-size: 1em width: 100% - line-height: 1.5em - border-bottom: 1px solid $-melon-colors.grey300 - transition: border-color 1s cursor: pointer + text-align: left + line-height: 1.5em + padding: 0.5em 0 + padding-right: 1.5em + box-sizing: border-box > .{$-melon-class-prefix}-icon + position: absolute + right: 0 + top: 0.5em display: inline-block font-size: 1.2em width: @font-size - vertical-align middle - margin-right: -@width + vertical-align: middle &.state-focus > label border-bottom-color: $-melon-colors.blue500 diff --git a/package.json b/package.json index 388b35a..56ea732 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "melon-calendar", - "version": "1.0.3", + "version": "1.0.4", "description": "React Calendar Component", "main": "lib/Calendar.js", "directories": { diff --git a/src/Calendar.js b/src/Calendar.js index 8afe7a2..687c330 100644 --- a/src/Calendar.js +++ b/src/Calendar.js @@ -262,7 +262,7 @@ export default class Calendar extends InputComponent { .build(); return ( -
+
{this.renderHiddenInput()}