@demos-europe/demosplan-ui 0.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.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/buildTokens.js +59 -0
  3. package/components/DpButton/DpButton.stories.mdx +136 -0
  4. package/components/DpButton/DpButton.vue +118 -0
  5. package/components/DpDetails/DpDetails.stories.mdx +55 -0
  6. package/components/DpDetails/DpDetails.vue +58 -0
  7. package/components/DpIcon/DpIcon.stories.mdx +396 -0
  8. package/components/DpIcon/DpIcon.vue +51 -0
  9. package/components/DpIcon/util/iconVariables.js +148 -0
  10. package/components/DpInput/DpInput.stories.mdx +127 -0
  11. package/components/DpInput/DpInput.vue +284 -0
  12. package/components/DpLabel/DpLabel.stories.mdx +103 -0
  13. package/components/DpLabel/DpLabel.vue +112 -0
  14. package/components/DpLoading/DpLoading.stories.mdx +63 -0
  15. package/components/DpLoading/DpLoading.vue +63 -0
  16. package/components/core/DpAccordion.vue +108 -0
  17. package/components/core/DpAnonymizeText.vue +136 -0
  18. package/components/core/DpAutocomplete.vue +133 -0
  19. package/components/core/DpBulkEditHeader.vue +53 -0
  20. package/components/core/DpButtonIcon.vue +47 -0
  21. package/components/core/DpButtonRow.vue +155 -0
  22. package/components/core/DpCard.vue +54 -0
  23. package/components/core/DpChangeStateAtDate.vue +223 -0
  24. package/components/core/DpCheckboxGroup.vue +93 -0
  25. package/components/core/DpContextualHelp.vue +54 -0
  26. package/components/core/DpCopyPasteButton.vue +47 -0
  27. package/components/core/DpDashboardTaskCard.vue +123 -0
  28. package/components/core/DpDataTable/DataTableSearch.js +44 -0
  29. package/components/core/DpDataTable/DpColumnSelector.vue +133 -0
  30. package/components/core/DpDataTable/DpDataTable.vue +647 -0
  31. package/components/core/DpDataTable/DpDataTableExtended.vue +377 -0
  32. package/components/core/DpDataTable/DpResizeHandle.vue +37 -0
  33. package/components/core/DpDataTable/DpSelectPageItemCount.vue +70 -0
  34. package/components/core/DpDataTable/DpTableHeader.vue +197 -0
  35. package/components/core/DpDataTable/DpTableRow.vue +355 -0
  36. package/components/core/DpDataTable/DpWrapTrigger.vue +48 -0
  37. package/components/core/DpDataTable/lib/ResizableColumns.js +83 -0
  38. package/components/core/DpEditableList.vue +161 -0
  39. package/components/core/DpEditor/DpBoilerPlate.vue +140 -0
  40. package/components/core/DpEditor/DpBoilerPlateModal.vue +166 -0
  41. package/components/core/DpEditor/DpEditor.vue +1281 -0
  42. package/components/core/DpEditor/DpLinkModal.vue +117 -0
  43. package/components/core/DpEditor/DpRecommendationModal/DpInsertableRecommendation.vue +137 -0
  44. package/components/core/DpEditor/DpRecommendationModal.vue +283 -0
  45. package/components/core/DpEditor/DpResizableImage.vue +121 -0
  46. package/components/core/DpEditor/DpUploadModal.vue +121 -0
  47. package/components/core/DpEditor/libs/Decoration.js +66 -0
  48. package/components/core/DpEditor/libs/SegmentRangeChangePlugin.js +35 -0
  49. package/components/core/DpEditor/libs/editorAnonymize.js +66 -0
  50. package/components/core/DpEditor/libs/editorBuildSuggestion.js +269 -0
  51. package/components/core/DpEditor/libs/editorCustomDelete.js +32 -0
  52. package/components/core/DpEditor/libs/editorCustomImage.js +100 -0
  53. package/components/core/DpEditor/libs/editorCustomInsert.js +32 -0
  54. package/components/core/DpEditor/libs/editorCustomLink.js +46 -0
  55. package/components/core/DpEditor/libs/editorCustomMark.js +32 -0
  56. package/components/core/DpEditor/libs/editorInsertAtCursorPos.js +41 -0
  57. package/components/core/DpEditor/libs/editorObscure.js +60 -0
  58. package/components/core/DpEditor/libs/editorUnAnonymize.js +56 -0
  59. package/components/core/DpEditor/libs/handleWordPaste.js +360 -0
  60. package/components/core/DpEditor/libs/preventDrop.js +31 -0
  61. package/components/core/DpEditor/libs/preventKeyboardInput.js +27 -0
  62. package/components/core/DpEditor/libs/preventPaste.js +28 -0
  63. package/components/core/DpFlyout.vue +119 -0
  64. package/components/core/DpInlineNotification.vue +116 -0
  65. package/components/core/DpModal.vue +208 -0
  66. package/components/core/DpObscure.vue +29 -0
  67. package/components/core/DpPager.vue +139 -0
  68. package/components/core/DpProgressBar.vue +67 -0
  69. package/components/core/DpRegisterFlyout.vue +58 -0
  70. package/components/core/DpResettableInput.vue +140 -0
  71. package/components/core/DpSkeletonBox.vue +32 -0
  72. package/components/core/DpSlidebar.vue +86 -0
  73. package/components/core/DpSlidingPagination.vue +45 -0
  74. package/components/core/DpSplitButton.vue +77 -0
  75. package/components/core/DpSwitcher.vue +62 -0
  76. package/components/core/DpTableCardList/DpTableCard.vue +61 -0
  77. package/components/core/DpTableCardList/DpTableCardListHeader.vue +83 -0
  78. package/components/core/DpTabs/DpTab.vue +52 -0
  79. package/components/core/DpTabs/DpTabs.vue +165 -0
  80. package/components/core/DpTextWrapper.vue +65 -0
  81. package/components/core/DpToggleForm.vue +72 -0
  82. package/components/core/DpTooltipIcon.vue +52 -0
  83. package/components/core/DpTransitionExpand.vue +87 -0
  84. package/components/core/DpTreeList/DpTreeList.vue +334 -0
  85. package/components/core/DpTreeList/DpTreeListCheckbox.vue +79 -0
  86. package/components/core/DpTreeList/DpTreeListNode.vue +348 -0
  87. package/components/core/DpTreeList/DpTreeListToggle.vue +71 -0
  88. package/components/core/DpTreeList/utils/constants.js +14 -0
  89. package/components/core/DpUpload/DpUpload.vue +223 -0
  90. package/components/core/DpUpload/DpUploadFiles.vue +269 -0
  91. package/components/core/DpUpload/DpUploadedFile.vue +80 -0
  92. package/components/core/DpUpload/DpUploadedFileList.vue +56 -0
  93. package/components/core/DpUpload/utils/GetFileIdsByHash.js +42 -0
  94. package/components/core/DpUpload/utils/UppyTranslations.js +31 -0
  95. package/components/core/DpVideoPlayer.vue +115 -0
  96. package/components/core/HeightLimit.vue +121 -0
  97. package/components/core/MultistepNav.vue +89 -0
  98. package/components/core/form/DpCheckbox.vue +108 -0
  99. package/components/core/form/DpDateRangePicker.vue +186 -0
  100. package/components/core/form/DpDatepicker.vue +160 -0
  101. package/components/core/form/DpDatetimePicker.vue +194 -0
  102. package/components/core/form/DpFormRow.vue +79 -0
  103. package/components/core/form/DpMultiselect.vue +164 -0
  104. package/components/core/form/DpRadio.vue +128 -0
  105. package/components/core/form/DpSearchField.vue +110 -0
  106. package/components/core/form/DpSelect.vue +149 -0
  107. package/components/core/form/DpTextArea.vue +152 -0
  108. package/components/core/form/DpTimePicker.vue +374 -0
  109. package/components/core/form/DpToggle.vue +78 -0
  110. package/components/core/index.js +132 -0
  111. package/components/core/notify/DpNotifyContainer.vue +122 -0
  112. package/components/core/notify/DpNotifyMessage.vue +95 -0
  113. package/components/core/shared/DpStickyElement.vue +95 -0
  114. package/components/index.js +24 -0
  115. package/components/shared/translations.js +15 -0
  116. package/directives/CleanHtml/CleanHtml.js +50 -0
  117. package/directives/CleanHtml/CleanHtml.stories.mdx +64 -0
  118. package/directives/Tooltip/Tooltip.js +40 -0
  119. package/directives/Tooltip/Tooltip.stories.mdx +42 -0
  120. package/directives/index.js +17 -0
  121. package/lib/index.js +14 -0
  122. package/lib/prefixClass.js +47 -0
  123. package/mixins/index.js +14 -0
  124. package/mixins/prefixClassMixin.js +22 -0
  125. package/package.json +52 -0
  126. package/shared/props.js +86 -0
  127. package/style/index.css +7 -0
  128. package/tailwind.config.js +24 -0
  129. package/tokens/color.json +358 -0
  130. package/tokens/color.stories.mdx +45 -0
  131. package/tokens/fontSize.json +100 -0
  132. package/tokens/space.json +33 -0
  133. package/utils/lengthHint.js +69 -0
@@ -0,0 +1,89 @@
1
+ <license>
2
+ (c) 2010-present DEMOS E-Partizipation GmbH.
3
+
4
+ This file is part of the package @demos-europe/demosplan-ui,
5
+ for more information see the license file.
6
+
7
+ All rights reserved
8
+ </license>
9
+
10
+ <documentation>
11
+ <!--
12
+
13
+ The MultistepNav generates a horizontal Bar with n steps
14
+ the steps can be decorated with an fa-icon.
15
+
16
+ on click of an "old" step the event change-step emits the new step index.
17
+
18
+ -->
19
+ <usage>
20
+ <multistep-nav
21
+ @change-step="val => step = val"
22
+ :active-step="step"
23
+ :steps="[{
24
+ label: 'my text here',
25
+ icon: 'fa-some-icon',
26
+ title: 'In this step you can do this'
27
+ }, {
28
+ label: 'this is the second step',
29
+ icon: 'fa-some-other-icon',
30
+ title: 'In this step you can do that'
31
+ }, {
32
+ label: 'and so on'
33
+ }]" />
34
+ </usage>
35
+ </documentation>
36
+
37
+ <template>
38
+ <nav :class="prefixClass('c-multistep')">
39
+ <button
40
+ v-for="(step, idx) in steps"
41
+ :key="`step_${idx}`"
42
+ :disabled="idx > activeStep"
43
+ @click="changeStep(idx)"
44
+ class="btn--blank"
45
+ :aria-label="step.title ? Translator.trans(step.title) : Translator.trans(step.label)"
46
+ :class="[
47
+ prefixClass('c-multistep__step'),
48
+ idx === activeStep ? prefixClass('is-active') : '',
49
+ idx > activeStep ? prefixClass('is-disabled') : ''
50
+ ]">
51
+ <span>
52
+ <i
53
+ v-if="step.icon"
54
+ aria-hidden="true"
55
+ :class="[prefixClass(step.icon), prefixClass('fa u-mr-0_25')]" />
56
+ {{ Translator.trans(step.label) }}
57
+ </span>
58
+ </button>
59
+ </nav>
60
+ </template>
61
+
62
+ <script>
63
+ import { prefixClassMixin } from 'demosplan-ui/mixins'
64
+
65
+ export default {
66
+ name: 'MultistepNav',
67
+
68
+ mixins: [prefixClassMixin],
69
+
70
+ props: {
71
+ activeStep: {
72
+ type: Number,
73
+ required: false,
74
+ default: 0
75
+ },
76
+
77
+ steps: {
78
+ type: Array,
79
+ required: true
80
+ }
81
+ },
82
+
83
+ methods: {
84
+ changeStep (val) {
85
+ this.$emit('change-step', val)
86
+ }
87
+ }
88
+ }
89
+ </script>
@@ -0,0 +1,108 @@
1
+ <license>
2
+ (c) 2010-present DEMOS E-Partizipation GmbH.
3
+
4
+ This file is part of the package @demos-europe/demosplan-ui,
5
+ for more information see the license file.
6
+
7
+ All rights reserved
8
+ </license>
9
+
10
+ <template>
11
+ <div :class="prefixClass('o-form__element--checkbox')">
12
+ <input
13
+ :id="id"
14
+ :name="name !== '' ? name : false"
15
+ :class="prefixClass('o-form__control-input')"
16
+ type="checkbox"
17
+ :required="required"
18
+ :disabled="disabled"
19
+ :readonly="readonly"
20
+ autocomplete="off"
21
+ :checked="checked"
22
+ :value="valueToSend"
23
+ @change="$emit('change', $event.target.checked)"
24
+ true-value="1"
25
+ false-value="0">
26
+ <dp-label
27
+ v-if="label.text !== ''"
28
+ :class="prefixClass('o-form__label')"
29
+ v-bind="{
30
+ bold: false,
31
+ text: '',
32
+ for: id,
33
+ required: required,
34
+ ...label,
35
+ }" />
36
+ </div>
37
+ </template>
38
+
39
+ <script>
40
+ import { DpLabel } from 'demosplan-ui/components'
41
+ import { prefixClassMixin } from 'demosplan-ui/mixins'
42
+
43
+ export default {
44
+ name: 'DpCheckbox',
45
+
46
+ components: {
47
+ DpLabel
48
+ },
49
+
50
+ mixins: [prefixClassMixin],
51
+
52
+ model: {
53
+ prop: 'checked',
54
+ event: 'change'
55
+ },
56
+
57
+ props: {
58
+ checked: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false
62
+ },
63
+
64
+ disabled: {
65
+ type: Boolean,
66
+ required: false,
67
+ default: false
68
+ },
69
+
70
+ id: {
71
+ type: String,
72
+ required: true
73
+ },
74
+
75
+ label: {
76
+ type: Object,
77
+ default: () => ({}),
78
+ validator: (prop) => {
79
+ return Object.keys(prop).every(key => ['bold', 'hint', 'text', 'tooltip'].includes(key))
80
+ }
81
+ },
82
+
83
+ name: {
84
+ type: String,
85
+ required: false,
86
+ default: ''
87
+ },
88
+
89
+ readonly: {
90
+ type: Boolean,
91
+ required: false,
92
+ default: false
93
+ },
94
+
95
+ required: {
96
+ type: Boolean,
97
+ required: false,
98
+ default: false
99
+ },
100
+
101
+ valueToSend: {
102
+ type: String,
103
+ required: false,
104
+ default: '1'
105
+ }
106
+ }
107
+ }
108
+ </script>
@@ -0,0 +1,186 @@
1
+ <license>
2
+ (c) 2010-present DEMOS E-Partizipation GmbH.
3
+
4
+ This file is part of the package @demos-europe/demosplan-ui,
5
+ for more information see the license file.
6
+
7
+ All rights reserved
8
+ </license>
9
+
10
+ <template>
11
+ <div class="flex flex-items-center">
12
+ <dp-datepicker
13
+ :id="startId"
14
+ :name="startName"
15
+ :min-date="minDate"
16
+ :max-date="maxStartDate"
17
+ :calendars-after="calendarsAfter"
18
+ :calendars-before="calendarsBefore"
19
+ :disabled="startDisabled"
20
+ :value="startValue"
21
+ :required="required || (endDate !== '' && endDate < currentDate)"
22
+ data-cy="startDateDescription"
23
+ @input="handleInputStartDate" />
24
+ <span>-</span>
25
+ <dp-datepicker
26
+ :id="endId"
27
+ :name="endName"
28
+ :min-date="minEndDate"
29
+ :max-date="maxDate"
30
+ :calendars-after="calendarsAfter"
31
+ :calendars-before="calendarsBefore"
32
+ :disabled="endDisabled"
33
+ :value="endValue"
34
+ :required="required"
35
+ data-cy="endDateDescription"
36
+ @input="handleInputEndDate" />
37
+ </div>
38
+ </template>
39
+
40
+ <script>
41
+ import DpDatepicker from './DpDatepicker'
42
+ import { formatDate } from 'demosplan-utils'
43
+
44
+ export default {
45
+ name: 'DpDateRangePicker',
46
+
47
+ components: {
48
+ DpDatepicker
49
+ },
50
+
51
+ props: {
52
+ calendarsAfter: {
53
+ type: Number,
54
+ required: false,
55
+ default: 0
56
+ },
57
+
58
+ calendarsBefore: {
59
+ type: Number,
60
+ required: false,
61
+ default: 0
62
+ },
63
+
64
+ endDisabled: {
65
+ type: Boolean,
66
+ required: false,
67
+ default: false
68
+ },
69
+
70
+ endId: {
71
+ type: String,
72
+ required: true
73
+ },
74
+
75
+ endName: {
76
+ type: String,
77
+ required: false,
78
+ default: ''
79
+ },
80
+
81
+ endValue: {
82
+ type: String,
83
+ required: false,
84
+ default: ''
85
+ },
86
+
87
+ enforcePlausibleDates: {
88
+ type: Boolean,
89
+ required: false,
90
+ default: false
91
+ },
92
+
93
+ maxDate: {
94
+ type: String,
95
+ required: false,
96
+ default: ''
97
+ },
98
+
99
+ minDate: {
100
+ type: String,
101
+ required: false,
102
+ default: ''
103
+ },
104
+
105
+ placeholder: {
106
+ type: String,
107
+ required: false,
108
+ default: ''
109
+ },
110
+
111
+ required: {
112
+ type: Boolean,
113
+ required: false,
114
+ default: false
115
+ },
116
+
117
+ startDisabled: {
118
+ type: Boolean,
119
+ required: false,
120
+ default: false
121
+ },
122
+
123
+ startId: {
124
+ type: String,
125
+ required: true
126
+ },
127
+
128
+ startName: {
129
+ type: String,
130
+ required: false,
131
+ default: ''
132
+ },
133
+
134
+ startValue: {
135
+ type: String,
136
+ required: false,
137
+ default: ''
138
+ }
139
+ },
140
+
141
+ data () {
142
+ return {
143
+ endDate: this.endValue,
144
+ maxStartDate: this.enforcePlausibleDates ? this.endValue : '',
145
+ minEndDate: this.enforcePlausibleDates ? this.startValue : ''
146
+ }
147
+ },
148
+
149
+ computed: {
150
+ currentDate () {
151
+ return formatDate()
152
+ }
153
+ },
154
+
155
+ watch: {
156
+ startValue (newVal) {
157
+ this.minEndDate = this.enforcePlausibleDates ? newVal : ''
158
+ },
159
+
160
+ endValue (newVal) {
161
+ this.maxStartDate = this.enforcePlausibleDates ? newVal : ''
162
+ }
163
+ },
164
+
165
+ methods: {
166
+ handleInputEndDate (value) {
167
+ this.updateMaxStartDate(value)
168
+ this.$emit('input:end-date', value)
169
+ },
170
+
171
+ handleInputStartDate (value) {
172
+ this.updateMinEndDate(value)
173
+ this.$emit('input:start-date', value)
174
+ },
175
+
176
+ updateMaxStartDate (value) {
177
+ this.endDate = value
178
+ this.maxStartDate = this.enforcePlausibleDates && value ? value : ''
179
+ },
180
+
181
+ updateMinEndDate (value) {
182
+ this.minEndDate = this.enforcePlausibleDates && value ? value : ''
183
+ }
184
+ }
185
+ }
186
+ </script>
@@ -0,0 +1,160 @@
1
+ <license>
2
+ (c) 2010-present DEMOS E-Partizipation GmbH.
3
+
4
+ This file is part of the package @demos-europe/demosplan-ui,
5
+ for more information see the license file.
6
+
7
+ All rights reserved
8
+ </license>
9
+
10
+ <template>
11
+ <div
12
+ :id="id"
13
+ data-cy="datepicker"
14
+ @input.stop.prevent="emitUpdate" />
15
+ </template>
16
+
17
+ <script>
18
+ // eslint-disable-next-line import/extensions
19
+ import Datepicker from 'a11y-datepicker/dist/index.es.min'
20
+
21
+ export default {
22
+ name: 'DpDatepicker',
23
+
24
+ props: {
25
+ calendarsAfter: {
26
+ type: Number,
27
+ required: false,
28
+ default: 0
29
+ },
30
+
31
+ calendarsBefore: {
32
+ type: Number,
33
+ required: false,
34
+ default: 0
35
+ },
36
+
37
+ disabled: {
38
+ type: Boolean,
39
+ required: false,
40
+ default: false
41
+ },
42
+
43
+ id: {
44
+ type: String,
45
+ required: true
46
+ },
47
+
48
+ maxDate: {
49
+ type: String,
50
+ required: false,
51
+ default: ''
52
+ },
53
+
54
+ minDate: {
55
+ type: String,
56
+ required: false,
57
+ default: ''
58
+ },
59
+
60
+ name: {
61
+ type: String,
62
+ required: false,
63
+ default: ''
64
+ },
65
+
66
+ placeholder: {
67
+ type: String,
68
+ required: false,
69
+ default: ''
70
+ },
71
+
72
+ required: {
73
+ type: Boolean,
74
+ required: false,
75
+ default: false
76
+ },
77
+
78
+ value: {
79
+ type: String,
80
+ required: false,
81
+ default: ''
82
+ }
83
+ },
84
+
85
+ data () {
86
+ return {
87
+ datepicker: null,
88
+ localConfig: {
89
+ theme: 'light',
90
+ locale: 'DE-de',
91
+ dateFormat: 'dd.mm.yyyy',
92
+ id: this.id,
93
+ inputClass: 'o-form__control-input width-100p'
94
+ }
95
+ }
96
+ },
97
+
98
+ watch: {
99
+ value: function () {
100
+ if (this.value !== null) {
101
+ const isNotSet = document.getElementById(this.id).getElementsByTagName('input')[0].value !== this.value
102
+ this.datepicker && isNotSet && this.datepicker.setDate(this.value, true)
103
+ }
104
+ },
105
+
106
+ maxDate: function () {
107
+ if (this.datepicker.getDate()) {
108
+ const currentDate = this.datepicker.getDateAsString()
109
+ this.datepicker = this.datepicker.updateDatepicker({ maxDate: this.maxDate })
110
+ this.datepicker.setDate(currentDate, true)
111
+ } else {
112
+ this.datepicker = this.datepicker.updateDatepicker({ maxDate: this.maxDate })
113
+ }
114
+ },
115
+
116
+ minDate: function () {
117
+ if (this.datepicker.getDate()) {
118
+ const currentDate = this.datepicker.getDateAsString()
119
+ this.datepicker = this.datepicker.updateDatepicker({ minDate: this.minDate })
120
+ this.datepicker.setDate(currentDate, true)
121
+ } else {
122
+ this.datepicker = this.datepicker.updateDatepicker({ minDate: this.minDate })
123
+ }
124
+ },
125
+
126
+ required: function () {
127
+ this.datepicker = this.datepicker.updateDatepicker({ required: this.required })
128
+ },
129
+
130
+ disabled: function () {
131
+ this.datepicker = this.datepicker.updateDatepicker({ disabled: this.disabled })
132
+ }
133
+ },
134
+
135
+ methods: {
136
+ emitUpdate (e) {
137
+ const currentVal = e.target.value
138
+ const date = this.datepicker.getDateAsString()
139
+ const valueToEmit = date === currentVal ? date : currentVal
140
+ this.$emit('input', valueToEmit)
141
+ this.$root.$emit('dp-datepicker', { id: this.id, value: valueToEmit })
142
+ }
143
+ },
144
+
145
+ mounted () {
146
+ const config = {
147
+ ...this.calendarsAfter > 0 ? { monthsAfterCurrent: this.calendarsAfter } : {},
148
+ ...this.calendarsBefore > 0 ? { monthsBeforeCurrent: this.calendarsBefore } : {},
149
+ ...this.maxDate !== '' ? { maxDate: this.maxDate } : {},
150
+ ...this.minDate !== '' ? { minDate: this.minDate } : {},
151
+ ...this.name !== '' ? { inputName: this.name } : {},
152
+ ...{ required: this.required },
153
+ ...{ disabled: this.disabled },
154
+ ...this.localConfig
155
+ }
156
+ this.datepicker = Datepicker(config)
157
+ this.value !== '' && this.datepicker.setDate(this.value)
158
+ }
159
+ }
160
+ </script>