@demos-europe/demosplan-ui 0.4.2 → 0.4.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.
Files changed (104) hide show
  1. package/.idea/php.xml +1 -0
  2. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_10_12_2024_13_09_[Changes]/shelved.patch +165 -0
  3. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_10_12_2024_13_09__Changes_.xml +4 -0
  4. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_12_11_2024_09_34_[Changes]/shelved.patch +19 -0
  5. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_12_11_2024_09_34_[Changes]1/shelved.patch +0 -0
  6. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_12_11_2024_09_34__Changes_.xml +4 -0
  7. package/.idea/shelf/Uncommitted_changes_before_Checkout_at_21_02_2025_09_50_[Changes]/shelved.patch +35 -0
  8. package/.idea/shelf/Uncommitted_changes_before_Update_at_04_12_2024_08_13_[Changes]/shelved.patch +41 -0
  9. package/.idea/shelf/Uncommitted_changes_before_Update_at_04_12_2024_08_13__Changes_.xml +4 -0
  10. package/.idea/workspace.xml +367 -284
  11. package/.yarn/install-state.gz +0 -0
  12. package/CHANGELOG.md +118 -0
  13. package/dist/demosplan-ui.umd.js +1 -1
  14. package/docker-compose.local.yml +1 -1
  15. package/package.json +8 -7
  16. package/src/components/DpButton/DpButton.vue +9 -7
  17. package/src/components/DpButtonRow/DpButtonRow.vue +17 -3
  18. package/src/components/DpContextualHelp/DpContextualHelp.vue +30 -3
  19. package/src/components/DpDataTable/DpDataTable.vue +1 -1
  20. package/src/components/DpDataTable/DpResizableColumn.vue +1 -1
  21. package/src/components/DpDataTable/DpTableHeader.vue +3 -1
  22. package/src/components/DpDataTable/DpTableRow.vue +4 -6
  23. package/src/components/DpEditableList/DpEditableList.vue +37 -36
  24. package/src/components/DpEditor/DpEditor.vue +22 -9
  25. package/src/components/DpEditor/DpUploadModal.vue +5 -3
  26. package/src/components/DpEditor/MentionList.vue +3 -0
  27. package/src/components/DpEditor/libs/customExtensions.js +0 -2
  28. package/src/components/DpEditor/libs/editorBuildSuggestion.js +1 -5
  29. package/src/components/DpEditor/libs/editorMention.js +0 -15
  30. package/src/components/DpEditor/libs/tiptapExtensions.js +4 -0
  31. package/src/components/DpFlyout/DpFlyout.vue +19 -4
  32. package/src/components/DpIcon/DpIcon.stories.mdx +12 -0
  33. package/src/components/DpIcon/util/iconConfig.ts +6 -0
  34. package/src/components/DpInput/DpInput.vue +40 -39
  35. package/src/components/DpLabel/DpLabel.vue +20 -20
  36. package/src/components/DpResettableInput/DpResettableInput.vue +12 -7
  37. package/src/components/DpSearchField/DpSearchField.vue +19 -14
  38. package/src/components/DpSelect/DpSelect.vue +2 -1
  39. package/src/components/DpTextArea/DpTextArea.vue +6 -3
  40. package/src/components/DpTreeList/DpTreeListToggle.vue +1 -0
  41. package/src/components/DpUploadFiles/DpUploadFiles.stories.mdx +1 -1
  42. package/src/components/DpUploadFiles/DpUploadFiles.stories.tsx +1 -1
  43. package/src/components/DpUploadFiles/index.ts +2 -2
  44. package/src/components/index.js +5 -1
  45. package/storybook-static/favicon.svg +7 -0
  46. package/storybook-static/index.html +123 -0
  47. package/storybook-static/index.json +1 -0
  48. package/storybook-static/project.json +1 -0
  49. package/storybook-static/sb-addons/essentials-actions-2/manager-bundle.js +3 -0
  50. package/storybook-static/sb-addons/essentials-actions-2/manager-bundle.js.LEGAL.txt +0 -0
  51. package/storybook-static/sb-addons/essentials-backgrounds-3/manager-bundle.js +12 -0
  52. package/storybook-static/sb-addons/essentials-backgrounds-3/manager-bundle.js.LEGAL.txt +0 -0
  53. package/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js +76 -0
  54. package/storybook-static/sb-addons/essentials-controls-1/manager-bundle.js.LEGAL.txt +18 -0
  55. package/storybook-static/sb-addons/essentials-measure-6/manager-bundle.js +3 -0
  56. package/storybook-static/sb-addons/essentials-measure-6/manager-bundle.js.LEGAL.txt +0 -0
  57. package/storybook-static/sb-addons/essentials-outline-7/manager-bundle.js +3 -0
  58. package/storybook-static/sb-addons/essentials-outline-7/manager-bundle.js.LEGAL.txt +0 -0
  59. package/storybook-static/sb-addons/essentials-toolbars-5/manager-bundle.js +3 -0
  60. package/storybook-static/sb-addons/essentials-toolbars-5/manager-bundle.js.LEGAL.txt +0 -0
  61. package/storybook-static/sb-addons/essentials-viewport-4/manager-bundle.js +3 -0
  62. package/storybook-static/sb-addons/essentials-viewport-4/manager-bundle.js.LEGAL.txt +0 -0
  63. package/storybook-static/sb-addons/links-0/manager-bundle.js +3 -0
  64. package/storybook-static/sb-addons/links-0/manager-bundle.js.LEGAL.txt +0 -0
  65. package/storybook-static/sb-common-assets/fonts.css +31 -0
  66. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  67. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  68. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  69. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  70. package/storybook-static/sb-manager/WithTooltip-V3YHNWJZ-TRLNWEGW.js +1 -0
  71. package/storybook-static/sb-manager/chunk-4IYAVH3S.js +348 -0
  72. package/storybook-static/sb-manager/chunk-CXYKRFSY.js +9 -0
  73. package/storybook-static/sb-manager/chunk-LVLAH4SI.js +7 -0
  74. package/storybook-static/sb-manager/chunk-VFHDXWEA.js +406 -0
  75. package/storybook-static/sb-manager/chunk-ZEU7PDD3.js +1 -0
  76. package/storybook-static/sb-manager/formatter-SWP5E3XI-7BGIK6BL.js +156 -0
  77. package/storybook-static/sb-manager/globals-module-info.js +1 -0
  78. package/storybook-static/sb-manager/globals.js +1 -0
  79. package/storybook-static/sb-manager/index.js +1 -0
  80. package/storybook-static/sb-manager/runtime.js +1 -0
  81. package/storybook-static/sb-manager/syntaxhighlighter-B5GMVT5T-EA5ASEYD.js +1 -0
  82. package/storybook-static/stories.json +1 -0
  83. package/tokens/dist/js/boxShadow.js +1 -1
  84. package/tokens/dist/js/breakpoints.js +1 -1
  85. package/tokens/dist/js/color.brand.js +1 -1
  86. package/tokens/dist/js/color.data.js +1 -1
  87. package/tokens/dist/js/color.palette.js +1 -1
  88. package/tokens/dist/js/color.ui.js +1 -1
  89. package/tokens/dist/js/fontSize.js +1 -1
  90. package/tokens/dist/js/rounded.js +1 -1
  91. package/tokens/dist/js/space.js +1 -1
  92. package/tokens/dist/js/zIndex.js +1 -1
  93. package/tokens/dist/scss/_boxShadow.scss +1 -1
  94. package/tokens/dist/scss/_breakpoints.scss +1 -1
  95. package/tokens/dist/scss/_color.brand.scss +1 -1
  96. package/tokens/dist/scss/_color.data.scss +1 -1
  97. package/tokens/dist/scss/_color.palette.scss +1 -1
  98. package/tokens/dist/scss/_color.ui.scss +1 -1
  99. package/tokens/dist/scss/_fontSize.scss +1 -1
  100. package/tokens/dist/scss/_rounded.scss +1 -1
  101. package/tokens/dist/scss/_space.scss +1 -1
  102. package/tokens/dist/scss/_zIndex.scss +1 -1
  103. package/tokens/dist/tailwind/color.brand.js +2 -2
  104. package/types/icons.ts +3 -0
package/.idea/php.xml CHANGED
@@ -10,6 +10,7 @@
10
10
  <option name="highlightLevel" value="WARNING" />
11
11
  <option name="transferred" value="true" />
12
12
  </component>
13
+ <component name="PhpProjectSharedConfiguration" php_language_level="8.2" />
13
14
  <component name="PhpStanOptionsConfiguration">
14
15
  <option name="transferred" value="true" />
15
16
  </component>
@@ -0,0 +1,165 @@
1
+ Index: src/components/DpContextualHelp/DpContextualHelp.vue
2
+ IDEA additional info:
3
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
+ <+><template>\n <dp-icon\n :aria-label=\"ariaLabel\"\n :icon=\"icon\"\n :size=\"size\"\n class=\"inline-block\"\n v-tooltip=\"tooltip\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, PropType } from 'vue'\nimport { IconName, IconSize } from '../../../types'\nimport { de } from '~/components/shared/translations'\nimport DpIcon from '~/components/DpIcon'\nimport { SIZES as ICON_SIZES } from '~/components/DpIcon/util/iconConfig'\nimport { Tooltip } from '~/directives'\n\nconst vTooltip = Tooltip\n\nconst props = defineProps({\n /**\n * The icon displayed as trigger for the tooltip.\n */\n icon: {\n type: String as PropType<IconName>,\n required: false,\n default: 'question'\n },\n\n /**\n * The icon size. May be small, medium, or large.\n */\n size: {\n type: String as PropType<IconSize>,\n required: false,\n default: 'medium',\n validator: (prop: IconSize) => Object.keys(ICON_SIZES).includes(prop)\n },\n\n /**\n * A string representing the actual tooltip content. May include html.\n * If you want to pass additional options, use the 'tooltipOptions' prop instead\n * ('tooltipOptions.content' for text)\n */\n text: {\n type: String,\n required: false,\n default: ''\n },\n /**\n * For available options check https://floating-vue.starpad.dev/api/#directive-options\n * When using, pass text via the 'content' property instead of using the 'text' prop above\n */\n tooltipOptions: {\n type: Object,\n required: false,\n default: () => ({})\n }\n})\n\nconst ariaLabel = de.contextualHelp\n\n/**\n * @return {string|object} Returns either text only or text and other options\n */\nconst tooltip = computed(() => {\n return Object.keys(props.tooltipOptions).length > 0\n ? props.tooltipOptions\n : props.text\n})\n\nonMounted(() => {\n if (!props.text && !props.tooltipOptions.content) {\n console.error('DpContextualHelp: No tooltip content provided. Add the \"tooltipOptions.content\" prop.')\n }\n})\n</script>\n
5
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
6
+ <+>UTF-8
7
+ ===================================================================
8
+ diff --git a/src/components/DpContextualHelp/DpContextualHelp.vue b/src/components/DpContextualHelp/DpContextualHelp.vue
9
+ --- a/src/components/DpContextualHelp/DpContextualHelp.vue (revision 7651d4b01fd464128356ac61f061892498940478)
10
+ +++ b/src/components/DpContextualHelp/DpContextualHelp.vue (date 1733828919400)
11
+ @@ -12,7 +12,7 @@
12
+ import { IconName, IconSize } from '../../../types'
13
+ import { de } from '~/components/shared/translations'
14
+ import DpIcon from '~/components/DpIcon'
15
+ -import { SIZES as ICON_SIZES } from '~/components/DpIcon/util/iconConfig'
16
+ +// import { SIZES as ICON_SIZES } from '~/components/DpIcon/util/iconConfig'
17
+ import { Tooltip } from '~/directives'
18
+
19
+ const vTooltip = Tooltip
20
+ @@ -33,8 +33,7 @@
21
+ size: {
22
+ type: String as PropType<IconSize>,
23
+ required: false,
24
+ - default: 'medium',
25
+ - validator: (prop: IconSize) => Object.keys(ICON_SIZES).includes(prop)
26
+ + default: 'medium'
27
+ },
28
+
29
+ /**
30
+ Index: yarn.lock
31
+ IDEA additional info:
32
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
33
+ <+>UTF-8
34
+ ===================================================================
35
+ diff --git a/yarn.lock b/yarn.lock
36
+ --- a/yarn.lock (revision 7651d4b01fd464128356ac61f061892498940478)
37
+ +++ b/yarn.lock (date 1733829898575)
38
+ @@ -2218,6 +2218,7 @@
39
+ jest: "npm:^29.7.0"
40
+ jest-environment-jsdom: "npm:^29.7.0"
41
+ jest-junit: "npm:^16.0.0"
42
+ + jest-resolve: "npm:^29.7.0"
43
+ jest-transform-stub: "npm:^2.0.0"
44
+ js-beautify: "npm:^1.14.7"
45
+ lscache: "npm:^1.3.2"
46
+ Index: webpack.config.js
47
+ IDEA additional info:
48
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
49
+ <+>const path = require('path');\nconst MiniCssExtractPlugin = require('mini-css-extract-plugin');\nconst { VueLoaderPlugin } = require('vue-loader');\nconst BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n\nconst bundleAnalyzer = new BundleAnalyzerPlugin({\n analyzerMode: 'static',\n reportFilename: resolve(`./bundle_analysis.html`)\n})\n\nconst isProduction = process.env.NODE_ENV === 'production';\n\nconst stylesHandler = MiniCssExtractPlugin.loader;\n\nfunction resolve (dir) {\n return path.join(__dirname, dir)\n}\n\nconst config = {\n entry: resolve('./src/index.js'),\n output: {\n path: resolve('dist'),\n publicPath: '',\n filename: 'demosplan-ui.umd.js',\n library: {\n name: '__demos_europe_demosplan_ui',\n type: 'var'\n },\n libraryExport: 'default',\n libraryTarget: 'umd',\n clean: true\n },\n externalsType: 'commonjs',\n externals: [\n '@braintree/sanitize-url',\n /^@uppy\\/.+$/,\n 'dayjs',\n 'dompurify',\n 'lscache',\n 'plyr',\n 'tippy.js',\n 'uuid',\n 'v-tooltip',\n 'vue',\n 'vue-multiselect',\n 'vuedraggable'\n ],\n resolve: {\n alias: {\n '~': path.resolve(__dirname, 'src')\n },\n extensions: ['.ts', '.js', '.vue'],\n symlinks: false\n },\n plugins: [\n new MiniCssExtractPlugin(),\n new VueLoaderPlugin(),\n ],\n module: {\n rules: [\n {\n test: /\\.(js|jsx)$/i,\n exclude: /node_modules/,\n loader: 'babel-loader'\n },\n {\n test: /\\.ts$/,\n loader: 'ts-loader',\n options: {\n appendTsSuffixTo: [/\\.vue$/]\n }\n },\n {\n test: /\\.css$/i,\n use: [\n stylesHandler,\n 'css-loader',\n 'postcss-loader'\n ],\n },\n {\n test: /\\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i,\n type: 'asset',\n },\n {\n test: /\\.vue$/,\n loader: 'vue-loader',\n options: {\n compilerOptions: {\n compatConfig: {\n MODE: 2\n }\n }\n }\n }\n ],\n },\n};\n\nmodule.exports = () => {\n if (isProduction) {\n config.mode = 'production';\n } else {\n config.mode = 'development';\n }\n\n if (process.argv.includes('--analyze')) {\n config.plugins.unshift(bundleAnalyzer)\n }\n\n return config;\n};\n
50
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
51
+ <+>UTF-8
52
+ ===================================================================
53
+ diff --git a/webpack.config.js b/webpack.config.js
54
+ --- a/webpack.config.js (revision 7651d4b01fd464128356ac61f061892498940478)
55
+ +++ b/webpack.config.js (date 1733751682176)
56
+ @@ -49,7 +49,7 @@
57
+ alias: {
58
+ '~': path.resolve(__dirname, 'src')
59
+ },
60
+ - extensions: ['.ts', '.js', '.vue'],
61
+ + extensions: ['.ts', '.js', '.mjs', '.vue'],
62
+ symlinks: false
63
+ },
64
+ plugins: [
65
+ @@ -59,7 +59,11 @@
66
+ module: {
67
+ rules: [
68
+ {
69
+ - test: /\.(js|jsx)$/i,
70
+ + test: /\.(mjs)$/i,
71
+ + loader: 'babel-loader'
72
+ + },
73
+ + {
74
+ + test: /\.(js|jsx|mjs)$/i,
75
+ exclude: /node_modules/,
76
+ loader: 'babel-loader'
77
+ },
78
+ Index: mjsResolver.js
79
+ ===================================================================
80
+ diff --git a/mjsResolver.js b/mjsResolver.js
81
+ new file mode 100644
82
+ --- /dev/null (date 1733830235238)
83
+ +++ b/mjsResolver.js (date 1733830235238)
84
+ @@ -0,0 +1,16 @@
85
+ +const mjsResolver = (path, options) => {
86
+ + const mjsExtRegex = /\.mjs$/i
87
+ + const resolver = options.defaultResolver
88
+ + if (mjsExtRegex.test(path)) {
89
+ + try {
90
+ + return resolver(path.replace(mjsExtRegex, '.mts'), options)
91
+ + } catch {
92
+ + // use default resolver
93
+ + }
94
+ + }
95
+ +
96
+ + return resolver(path, options)
97
+ +}
98
+ +
99
+ +
100
+ +module.exports = mjsResolver
101
+ Index: src/components/DpIcon/util/iconConfig.ts
102
+ IDEA additional info:
103
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
104
+ <+>import {\n PhArrowDown,\n PhArrowLeft,\n PhArrowRight,\n PhArrowsClockwise,\n PhArrowUp,\n PhCaretDown,\n PhCaretLeft,\n PhCaretRight,\n PhCaretUp,\n PhCaretDoubleDown,\n PhCaretDoubleUp,\n PhCheck,\n PhCheckCircle,\n PhCircleNotch,\n PhClock,\n PhCopy,\n PhCornersIn,\n PhCornersOut,\n PhClockCounterClockwise,\n PhDownloadSimple,\n PhDotsSixVertical,\n PhEnvelopeSimple,\n PhFile,\n PhGearSix,\n PhHighlighter,\n PhHourglass,\n PhInfo,\n PhLockSimple,\n PhLockSimpleOpen,\n PhMagnifyingGlass,\n PhPencilSimple,\n PhPhone,\n PhPlus,\n PhRobot,\n PhQuestion,\n PhSignOut,\n PhTag,\n PhTrash,\n PhUser,\n PhUsersThree,\n PhWarning,\n PhWarningDiamond,\n PhX,\n PhXCircle\n} from '@phosphor-icons/vue'\nimport {\n AliasedPhosphorIconName,\n IconAlias,\n IconName,\n IconProportion,\n IconSize,\n PhosphorIconName} from '../../../../types'\nimport type { Component } from 'vue'\n\n// ICONS\n\n// icon names that are used and already correspond to the phosphor icon name\nconst mappedIcons: Record<PhosphorIconName | AliasedPhosphorIconName, Component> = {\n 'arrow-down': PhArrowDown,\n 'arrow-left': PhArrowLeft,\n 'arrow-right': PhArrowRight,\n 'arrow-up': PhArrowUp,\n 'caret-down': PhCaretDown,\n 'caret-left': PhCaretLeft,\n 'caret-right': PhCaretRight,\n 'caret-up': PhCaretUp,\n 'caret-double-down': PhCaretDoubleDown,\n 'caret-double-up': PhCaretDoubleUp,\n 'check': PhCheck,\n 'check-circle': PhCheckCircle,\n 'clock': PhClock,\n 'copy': PhCopy,\n 'file': PhFile,\n 'highlighter': PhHighlighter,\n 'hourglass': PhHourglass,\n 'info': PhInfo,\n 'plus': PhPlus,\n 'phone': PhPhone,\n 'question': PhQuestion,\n 'sign-out': PhSignOut,\n 'tag': PhTag,\n 'user': PhUser,\n 'users-three': PhUsersThree,\n 'warning': PhWarning,\n 'x': PhX,\n 'x-circle': PhXCircle,\n 'arrows-clockwise': PhArrowsClockwise, // alias: refresh\n 'circle-notch': PhCircleNotch, // alias: spinner\n 'clock-counter-clockwise': PhClockCounterClockwise, // alias: history\n 'corners-in': PhCornersIn, // alias: compress\n 'corners-out': PhCornersOut, // alias: expand\n 'dots-six-vertical': PhDotsSixVertical, // alias: drag-handle\n 'download-simple': PhDownloadSimple, // alias: download\n 'envelope-simple': PhEnvelopeSimple, // alias: mail\n 'gear-six': PhGearSix, // alias: settings\n 'lock-simple': PhLockSimple, // alias: lock\n 'lock-simple-open': PhLockSimpleOpen, // alias: unlock\n 'magnifying-glass': PhMagnifyingGlass, // alias: search\n 'pencil-simple': PhPencilSimple, // alias: edit\n 'robot': PhRobot, // alias: ai\n 'warning-diamond': PhWarningDiamond, // alias: severe\n}\n\n// icon names that are used as aliases - the phosphor icon has a different name\nconst mappedIconAliases: Record<IconAlias, Component> = {\n 'ai': PhRobot,\n 'cancel': PhX,\n 'chevron-down': PhArrowDown,\n 'chevron-left': PhArrowLeft,\n 'chevron-right': PhArrowRight,\n 'chevron-up': PhArrowUp,\n 'close': PhX,\n 'compress': PhCornersIn,\n 'delete': PhTrash,\n 'download': PhDownloadSimple,\n 'drag-handle': PhDotsSixVertical,\n 'edit': PhPencilSimple,\n 'expand': PhCornersOut,\n 'history': PhClockCounterClockwise,\n 'lock': PhLockSimple,\n 'mail': PhEnvelopeSimple,\n 'refresh': PhArrowsClockwise,\n 'remove': PhX,\n 'search': PhMagnifyingGlass,\n 'settings': PhGearSix,\n 'severe': PhWarningDiamond,\n 'spinner': PhCircleNotch,\n 'success': PhCheck,\n 'unlock': PhLockSimpleOpen,\n 'userSolid': PhUser,\n 'xmark': PhX\n}\n\n// ICON PROPORTIONS\n\nconst iconsProportions: Record<string, IconProportion> = {\n 'arrow-down': 'portrait',\n 'arrow-left': 'landscape',\n 'arrow-right': 'landscape',\n 'arrow-up': 'portrait',\n 'caret-down': 'landscape',\n 'caret-left': 'portrait',\n 'caret-right': 'portrait',\n 'caret-up': 'landscape',\n 'caret-double-down': 'portrait',\n 'caret-double-up': 'portrait',\n 'check': 'landscape',\n 'dots-six-vertical': 'portrait',\n 'envelope-simple': 'landscape'\n}\n\nconst aliasedIconsProportions: Record<string, IconProportion> = {\n 'chevron-down': 'landscape', // alias for caret-down\n 'chevron-left': 'portrait', // alias for caret-left\n 'chevron-right': 'portrait', // alias for caret-right\n 'chevron-up': 'landscape', // alias for caret-up\n 'drag-handle': 'portrait', // alias for dots-six-vertical\n 'mail': 'landscape', // alias for envelope-simple\n}\n\n// EXPORTS\n\nexport const iconComponents: Record<IconName, Component> = {\n ...mappedIcons,\n ...mappedIconAliases\n}\n\nexport const proportions: Record<string, IconProportion> = {\n ...iconsProportions,\n ...aliasedIconsProportions\n}\n\nexport const SIZES: Record<IconSize, number> = {\n 'small': 16,\n 'medium': 20,\n 'large': 24,\n 'xlarge': 32,\n}\n
105
+ ===================================================================
106
+ diff --git a/src/components/DpIcon/util/iconConfig.ts b/src/components/DpIcon/util/iconConfig.ts
107
+ --- a/src/components/DpIcon/util/iconConfig.ts (revision 7651d4b01fd464128356ac61f061892498940478)
108
+ +++ b/src/components/DpIcon/util/iconConfig.ts (date 1733830263898)
109
+ @@ -56,7 +56,7 @@
110
+ // ICONS
111
+
112
+ // icon names that are used and already correspond to the phosphor icon name
113
+ -const mappedIcons: Record<PhosphorIconName | AliasedPhosphorIconName, Component> = {
114
+ +const mappedIcons = {
115
+ 'arrow-down': PhArrowDown,
116
+ 'arrow-left': PhArrowLeft,
117
+ 'arrow-right': PhArrowRight,
118
+ @@ -103,7 +103,7 @@
119
+ }
120
+
121
+ // icon names that are used as aliases - the phosphor icon has a different name
122
+ -const mappedIconAliases: Record<IconAlias, Component> = {
123
+ +const mappedIconAliases = {
124
+ 'ai': PhRobot,
125
+ 'cancel': PhX,
126
+ 'chevron-down': PhArrowDown,
127
+ @@ -134,7 +134,7 @@
128
+
129
+ // ICON PROPORTIONS
130
+
131
+ -const iconsProportions: Record<string, IconProportion> = {
132
+ +const iconsProportions = {
133
+ 'arrow-down': 'portrait',
134
+ 'arrow-left': 'landscape',
135
+ 'arrow-right': 'landscape',
136
+ @@ -150,7 +150,7 @@
137
+ 'envelope-simple': 'landscape'
138
+ }
139
+
140
+ -const aliasedIconsProportions: Record<string, IconProportion> = {
141
+ +const aliasedIconsProportions = {
142
+ 'chevron-down': 'landscape', // alias for caret-down
143
+ 'chevron-left': 'portrait', // alias for caret-left
144
+ 'chevron-right': 'portrait', // alias for caret-right
145
+ @@ -161,17 +161,17 @@
146
+
147
+ // EXPORTS
148
+
149
+ -export const iconComponents: Record<IconName, Component> = {
150
+ +export const iconComponents = {
151
+ ...mappedIcons,
152
+ ...mappedIconAliases
153
+ }
154
+
155
+ -export const proportions: Record<string, IconProportion> = {
156
+ +export const proportions = {
157
+ ...iconsProportions,
158
+ ...aliasedIconsProportions
159
+ }
160
+
161
+ -export const SIZES: Record<IconSize, number> = {
162
+ +export const SIZES = {
163
+ 'small': 16,
164
+ 'medium': 20,
165
+ 'large': 24,
@@ -0,0 +1,4 @@
1
+ <changelist name="Uncommitted_changes_before_Checkout_at_10_12_2024_13_09_[Changes]" date="1733832586761" recycled="false" toDelete="true">
2
+ <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Checkout_at_10_12_2024_13_09_[Changes]/shelved.patch" />
3
+ <option name="DESCRIPTION" value="Uncommitted changes before Checkout at 10 12 2024 13:09 [Changes]" />
4
+ </changelist>
@@ -0,0 +1,19 @@
1
+ Index: src/components/DpButton/DpButton.vue
2
+ IDEA additional info:
3
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
+ <+><!--suppress GrazieInspection -->\n<template>\n <component\n :is=\"element\"\n :type=\"isButtonElement ? type : null\"\n :href=\"!isButtonElement ? sanitizedHref : null\"\n :class=\"classes\"\n :disabled=\"disabled\"\n :aria-hidden=\"busy\"\n v-tooltip=\"iconOnly ? text : null\"\n @click=\"emit('click', $event)\">\n <dp-icon\n v-if=\"icon\"\n aria-hidden=\"true\"\n :icon=\"icon\"\n :size=\"iconSize\" />\n <span\n :class=\"{'sr-only': hideText}\"\n v-text=\"text\" />\n <dp-icon\n v-if=\"iconAfter\"\n aria-hidden=\"true\"\n :icon=\"iconAfter\"\n :size=\"iconSize\" />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, PropType } from 'vue'\nimport { IconName, IconSize } from '../../../types'\nimport DpIcon from '~/components/DpIcon/DpIcon.vue'\nimport { sanitizeUrl } from '@braintree/sanitize-url'\nimport { proportions as ICON_PROPORTIONS, SIZES as ICON_SIZES } from '~/components/DpIcon/util/iconConfig'\nimport { Tooltip } from '~/directives'\n\ntype ButtonColor = 'primary' | 'secondary' | 'warning'\ntype ButtonType = 'button' | 'submit'\ntype ButtonVariant = 'solid' | 'outline' | 'subtle'\n\nconst props = defineProps({\n /**\n * While waiting for a network response, the visual state of the button can be changed via the `busy` property.\n */\n busy: {\n type: [Boolean, null],\n required: false,\n default: null\n },\n\n /**\n * The color of the button may be `primary`, `secondary`, or `warning`.\n */\n color: {\n type: String as PropType<ButtonColor>,\n required: false,\n default: 'primary',\n validator: (prop: ButtonColor) => ['primary', 'secondary', 'warning'].includes(prop)\n },\n\n disabled: {\n type: [Boolean, null],\n required: false,\n default: null\n },\n\n /**\n * This may be set to true to render icon-only buttons.\n * The `text` prop will be visually hidden in this case, keeping the button accessible.\n */\n hideText: {\n type: Boolean,\n required: false,\n default: false\n },\n\n /**\n * When passing an href, a link is rendered instead of a button element.\n * The value of its `href` attribute is sanitized, defaulting to `'about:blank'` for unsafe values.\n */\n href: {\n type: String,\n required: false,\n default: '#'\n },\n\n /**\n * Icon that will be placed before button text.\n */\n icon: {\n type: String as PropType<IconName>,\n required: false,\n default: ''\n },\n\n /**\n * Define the size of the button icons.\n */\n iconSize: {\n type: String as PropType<IconSize>,\n required: false,\n default: 'small',\n validator: (prop: IconSize) => Object.keys(ICON_SIZES).includes(prop)\n },\n\n /**\n * Icon that will be placed after button text.\n */\n iconAfter: {\n type: String as PropType<IconName>,\n required: false,\n default: ''\n },\n\n /**\n * Renders the button with a pill-like appearance when set to true.\n */\n rounded: {\n type: Boolean,\n required: false,\n default: false\n },\n\n /**\n * Text content of the button element.\n */\n text: {\n type: String,\n required: false,\n default: 'save'\n },\n\n /**\n * The type attribute can be set to a value of `submit` manually, if the button is used to post a form.\n */\n type: {\n type: String as PropType<ButtonType>,\n required: false,\n default: 'button',\n validator: (prop: ButtonType): boolean => ['button', 'submit'].includes(prop)\n },\n\n /**\n * The button may have a variant of `solid`, `outline`, or `subtle`.\n * When not specified, the `solid` variant (white on colored background) is applied.\n */\n variant: {\n type: String as PropType<ButtonVariant>,\n required: false,\n default: 'solid',\n validator: (prop: ButtonVariant) => ['solid', 'outline', 'subtle'].includes(prop)\n }\n})\n\nconst emit = defineEmits(['click'])\n\nconst iconOnly = computed(() => (props.icon || props.iconAfter) && props.hideText)\n\nconst classes = computed(() => [\n 'inline-flex items-center leading-3 text-button select-none',\n ...colorClasses.value,\n ...spacingClasses.value,\n props.busy && 'bg-busy animate-busy pointer-events-none',\n props.disabled && 'opacity-40 pointer-events-none',\n props.rounded ? 'rounded-full' : 'rounded-button'\n])\n\nconst colorClasses = computed(() => {\n const colors = allColorClasses[props.color]\n const renderedColors = [colors.solidOutlineSubtle]\n\n switch (props.variant) {\n case 'solid':\n renderedColors.push(colors.solidOutline, colors.solid)\n break\n case 'outline':\n renderedColors.push(colors.solidOutline, colors.outlineSubtle)\n break\n case 'subtle':\n renderedColors.push(colors.outlineSubtle, colors.subtle)\n break\n default:\n break\n }\n\n return renderedColors\n})\n\n// Visually compensate button padding for icons with portrait proportions\nconst iconPortrait = computed(() => !props.hideText && ICON_PROPORTIONS[props.icon] === 'portrait')\nconst iconAfterPortrait = computed(() => !props.hideText && ICON_PROPORTIONS[props.iconAfter] === 'portrait')\n\nconst spacingClasses = computed(() => {\n // Default padding for text buttons, resulting in a 30px height that matches input fields.\n let padding = `${iconPortrait.value ? 'pl-1' : 'pl-2'} py-1 ${iconAfterPortrait.value ? 'pr-1' : 'pr-2'}`\n\n // The small and large iconOnly buttons create a scale alongside the medium iconOnly button which shares its 30px height with input fields.\n if (iconOnly.value) {\n switch (props.iconSize) {\n case 'large':\n padding = 'p-1.5'\n break\n case 'small':\n padding = 'p-0.5'\n break\n case 'medium':\n padding = 'p-[5px]'\n break\n default:\n break\n }\n }\n return [\n 'space-x-1',\n padding\n ]\n})\n\nconst element = computed(() => isButtonElement.value ? 'button' : 'a')\nconst isButtonElement = computed(() => props.href === '#')\nconst sanitizedHref = computed(() => sanitizeUrl(props.href))\n\nconst vTooltip = Tooltip\n\nonMounted(() => {\n if (!(props.icon || props.iconAfter) && props.hideText) {\n console.error(`A DpButton instance is used without icon or visible text. Consider showing something to users.`)\n }\n})\n\nconst allColorClasses = {\n primary: {\n /**\n * solidOutlineSubtle: classes that apply to all button color variants.\n *\n * Instead of hardcoding #005eb1 here, focus-visible:outline-interactive-hover/50 could be used.\n * However, for this to work, token css variables would have to be rendered within @layer base with modern rbg\n * syntax, to be able to utilize the \"<alpha-value>\" placeholder to support opacity on css variables.\n * See\n * - https://tailwindcss.com/docs/customizing-colors#using-css-variables\n * - https://www.natestephens.dev/opacity-with-css-variable-color\n */\n solidOutlineSubtle: `\n outline outline-4 outline-offset-0 outline-transparent\n focus-visible:outline-[#005eb1]/50 focus-visible:z-above-zero`,\n /**\n * solidOutline: classes that apply to \"solid\" and \"outline\" button color variants.\n *\n * Solid buttons have a 1px border with the same color as the bg color, to be the same overall size as outline buttons.\n * The same border is applied to outline buttons.\n */\n solidOutline: `\n border border-interactive\n hover:border-interactive-hover\n focus:border-interactive-hover\n focus-visible:border-interactive-hover\n active:border-interactive-active `,\n // outlineSubtle: classes that apply to \"outline\" and \"subtle\" button color variants.\n outlineSubtle: `\n bg-surface text-interactive\n hover:bg-interactive-subtle-hover hover:text-interactive-hover\n focus:bg-interactive-subtle-hover focus:text-interactive-hover\n focus-visible:bg-interactive-subtle-hover focus-visible:text-interactive-hover\n active:bg-interactive-subtle-active active:text-interactive-active `,\n // solid: classes that only apply to \"solid\" button color variant.\n solid: `\n bg-interactive text-on-dark\n hover:text-on-dark hover:no-underline hover:bg-interactive-hover\n focus:bg-interactive-hover\n focus-visible:bg-interactive-hover\n active:bg-interactive-active `,\n // subtle: classes that only apply to \"subtle\" button color variant.\n subtle: `\n border border-on-dark\n hover:border-interactive-subtle-hover\n focus:border-interactive-subtle-hover\n focus-visible:border-interactive-subtle-hover\n active:border-interactive-subtle-active `\n },\n secondary: {\n solidOutlineSubtle: ' outline outline-4 outline-offset-0 outline-transparent focus-visible:outline-[#595959]/50 ',\n solidOutline: `\n border border-interactive-secondary\n hover:border-interactive-secondary-hover\n focus:border-interactive-secondary-hover\n focus-visible:border-interactive-secondary-hover\n active:border-interactive-secondary-active `,\n outlineSubtle: `\n bg-surface text-interactive-secondary\n hover:bg-interactive-secondary-subtle-hover hover:text-interactive-secondary-hover\n focus:bg-interactive-secondary-subtle-hover focus:text-interactive-secondary-hover\n focus-visible:bg-interactive-secondary-subtle-hover focus-visible:text-interactive-secondary-hover\n active:bg-interactive-secondary-subtle-active active:text-interactive-secondary-active `,\n solid: `\n bg-interactive-secondary text-on-dark\n hover:text-on-dark hover:no-underline hover:bg-interactive-secondary-hover\n focus:bg-interactive-secondary-hover\n focus-visible:bg-interactive-secondary-hover\n active:bg-interactive-secondary-active `,\n subtle: `\n border border-on-dark\n hover:border-interactive-secondary-subtle-hover\n focus:border-interactive-secondary-subtle-hover\n focus-visible:border-interactive-secondary-subtle-hover\n active:border-interactive-secondary-subtle-active `\n },\n warning: {\n solidOutlineSubtle: ' outline outline-4 outline-offset-0 outline-transparent focus-visible:outline-[#B20000]/50 ',\n solidOutline: `\n border border-interactive-warning\n hover:border-interactive-warning-hover\n focus:border-interactive-warning-hover\n focus-visible:border-interactive-warning-hover\n active:border-interactive-warning-active `,\n outlineSubtle: `\n bg-surface text-interactive-warning\n hover:bg-interactive-warning-subtle-hover hover:text-interactive-warning-hover\n focus:bg-interactive-warning-subtle-hover focus:text-interactive-warning-hover\n focus-visible:bg-interactive-warning-subtle-hover focus-visible:text-interactive-warning-hover\n active:bg-interactive-warning-subtle-active active:text-interactive-warning-active `,\n solid: `\n bg-interactive-warning text-on-dark\n hover:text-on-dark hover:no-underline hover:bg-interactive-warning-hover\n focus:bg-interactive-warning-hover\n focus-visible:bg-interactive-warning-hover\n active:bg-interactive-warning-active `,\n subtle: `\n border border-on-dark\n hover:border-interactive-warning-subtle-hover\n focus:border-interactive-warning-subtle-hover\n focus-visible:border-interactive-warning-subtle-hover\n active:border-interactive-warning-subtle-active `\n }\n}\n</script>\n
5
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
6
+ <+>UTF-8
7
+ ===================================================================
8
+ diff --git a/src/components/DpButton/DpButton.vue b/src/components/DpButton/DpButton.vue
9
+ --- a/src/components/DpButton/DpButton.vue
10
+ +++ b/src/components/DpButton/DpButton.vue
11
+ @@ -136,7 +136,7 @@
12
+ type: String as PropType<ButtonType>,
13
+ required: false,
14
+ default: 'button',
15
+ - validator: (prop: ButtonType): boolean => ['button', 'submit'].includes(prop)
16
+ + validator: (prop: ButtonType): boolean => ['button', 'submit', 'reset'].includes(prop)
17
+ },
18
+
19
+ /**
@@ -0,0 +1,4 @@
1
+ <changelist name="Uncommitted_changes_before_Checkout_at_12_11_2024_09_34_[Changes]" date="1731400484673" recycled="false" toDelete="true">
2
+ <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Checkout_at_12_11_2024_09_34_[Changes]/shelved.patch" />
3
+ <option name="DESCRIPTION" value="Uncommitted changes before Checkout at 12 11 2024 09:34 [Changes]" />
4
+ </changelist>
@@ -0,0 +1,35 @@
1
+ Index: src/components/DpPager/DpPager.vue
2
+ IDEA additional info:
3
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
+ <+><template>\n <div class=\"c-pager__dropdown\">\n <label\n class=\"c-pager__dropdown-label u-m-0 u-p-0 weight--normal inline-block\"\n :aria-label=\"Translator.trans('pager.amount.multiple.label', { results: totalItems, items: Translator.trans('pager.amount.multiple.items') })\">\n <dp-sliding-pagination\n v-if=\"totalItems > Math.min(...limits)\"\n class=\"inline-block\"\n :current=\"currentPage\"\n :nonSlidingSize=\"3\"\n :slidingEndingSize=\"1\"\n :slidingWindowSize=\"1\"\n :total=\"totalPages || 1\"\n @page-change=\"handlePageChange\" />\n <div\n class=\"inline-block\"\n v-if=\"totalItems > Math.min(...limits)\">\n <dp-multiselect\n v-model=\"itemsPerPage\"\n class=\"inline-block\"\n :options=\"filteredLimits\"\n :searchable=\"false\"\n selected-label=\"\"\n @select=\"handleSizeChange\"/>\n </div>\n <span v-else>{{ totalItems }}</span>\n <span aria-hidden=\"true\">\n {{ Translator.trans('pager.amount.multiple.of') }}\n <span data-cy=\"totalItems\">{{ totalItems }}</span>\n {{ Translator.trans('pager.amount.multiple.items') }}\n </span>\n </label>\n </div>\n</template>\n\n<script>\nimport DpMultiselect from '~/components/DpMultiselect'\nimport DpSlidingPagination from '~/components/DpSlidingPagination'\n\nexport default {\n name: 'DpPager',\n\n components: {\n DpSlidingPagination,\n DpMultiselect\n },\n\n props: {\n currentPage: {\n required: false,\n type: Number,\n default: 1\n },\n\n totalItems: {\n required: false,\n type: Number,\n default: 1\n },\n\n totalPages: {\n required: false,\n type: Number,\n default: 1\n },\n\n perPage: {\n required: false,\n type: Number,\n default: 1\n },\n\n limits: {\n required: false,\n type: Array,\n default: () => []\n }\n },\n\n data () {\n return {\n itemsPerPage: this.perPage <= this.totalItems ? this.perPage : this.totalItems\n }\n },\n\n computed: {\n filteredLimits () {\n const filtered = this.limits.filter(limit => limit <= this.totalItems)\n\n if (filtered.length < this.limits.length && this.totalItems > filtered[filtered.length - 1]) {\n filtered.push(this.totalItems)\n }\n\n if (filtered.includes(this.itemsPerPage) === false) {\n filtered.push(this.itemsPerPage)\n }\n filtered.sort((a, b) => a - b)\n\n return filtered\n }\n },\n\n methods: {\n handlePageChange (newPage) {\n this.$emit('page-change', newPage)\n },\n\n handleSizeChange (selectedOption) {\n this.$emit('size-change', parseInt(selectedOption))\n }\n }\n}\n</script>\n
5
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
6
+ <+>UTF-8
7
+ ===================================================================
8
+ diff --git a/src/components/DpPager/DpPager.vue b/src/components/DpPager/DpPager.vue
9
+ --- a/src/components/DpPager/DpPager.vue (revision 87a9fc0e85dcab37e6e71800508e0c10a8338768)
10
+ +++ b/src/components/DpPager/DpPager.vue (date 1738594041991)
11
+ @@ -3,15 +3,15 @@
12
+ <label
13
+ class="c-pager__dropdown-label u-m-0 u-p-0 weight--normal inline-block"
14
+ :aria-label="Translator.trans('pager.amount.multiple.label', { results: totalItems, items: Translator.trans('pager.amount.multiple.items') })">
15
+ - <dp-sliding-pagination
16
+ - v-if="totalItems > Math.min(...limits)"
17
+ - class="inline-block"
18
+ - :current="currentPage"
19
+ - :nonSlidingSize="3"
20
+ - :slidingEndingSize="1"
21
+ - :slidingWindowSize="1"
22
+ - :total="totalPages || 1"
23
+ - @page-change="handlePageChange" />
24
+ + <dp-sliding-pagination
25
+ + v-if="totalItems > Math.min(...limits)"
26
+ + class="inline-block"
27
+ + :current="currentPage"
28
+ + :nonSlidingSize="3"
29
+ + :slidingEndingSize="1"
30
+ + :slidingWindowSize="1"
31
+ + :total="totalPages || 1"
32
+ + @page-change="handlePageChange" />
33
+ <div
34
+ class="inline-block"
35
+ v-if="totalItems > Math.min(...limits)">
@@ -0,0 +1,41 @@
1
+ Index: src/utils/prefixClass.js
2
+ IDEA additional info:
3
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
+ <+>/**\n * Prefix css classes with a parameter given from the project settings\n *\n * @param {String} classList or querySelector\n *\n * @return {String} prefixed classList\n */\nexport default function prefixClass (classList = '') {\n let prefix = ''\n if (typeof dplan !== 'undefined' && dplan.settings && dplan.settings.publicCSSClassPrefix) {\n prefix = dplan.settings.publicCSSClassPrefix\n }\n\n let prefixed = ''\n\n // Don't try to do something if the result should not change\n if (prefix === '') {\n return classList\n }\n\n // Throw error if the type is wrong\n if (typeof classList !== 'string') {\n throw new Error('classList is an' + typeof classList + '. should be String.', classList)\n }\n\n /*\n * Assuming that a querySelector is passed when classList contains a dot, only the class selector parts are prefixed.\n * In the unlikely case that classes contain dots as part of their names, they will not be prefixed.\n */\n const checkClassList = /[.#[]/gi\n if (checkClassList.test(classList)) {\n prefixed = classList.replace(/(\\.)(\\S+)/gi, (cl, m1, m2) => `.${prefix}${m2}`)\n } else {\n prefixed = classList.replace(/(\\S+)/gi, cl => `${prefix}${cl}`)\n }\n\n return prefixed\n}\n
5
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
6
+ <+>UTF-8
7
+ ===================================================================
8
+ diff --git a/src/utils/prefixClass.js b/src/utils/prefixClass.js
9
+ --- a/src/utils/prefixClass.js (revision 7c37a9a7e1b33327b834347c85796e2acce6591a)
10
+ +++ b/src/utils/prefixClass.js (date 1733213132330)
11
+ @@ -29,9 +29,9 @@
12
+ */
13
+ const checkClassList = /[.#[]/gi
14
+ if (checkClassList.test(classList)) {
15
+ - prefixed = classList.replace(/(\.)(\S+)/gi, (cl, m1, m2) => `.${prefix}${m2}`)
16
+ + prefixed = classList.replaceAll(/(\.)(\S+)/gi, (cl, m1, m2) => `.${prefix}${m2}`)
17
+ } else {
18
+ - prefixed = classList.replace(/(\S+)/gi, cl => `${prefix}${cl}`)
19
+ + prefixed = classList.replaceAll(/(\S+)/gi, cl => `${prefix}${cl}`)
20
+ }
21
+
22
+ return prefixed
23
+ Index: src/components/DpFormRow/DpFormRow.vue
24
+ IDEA additional info:
25
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
26
+ <+><template>\n <div>\n <!-- insert form fields here -->\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DpFormRow',\n\n data () {\n return {\n // Number of elements in the form row\n elementCount: 0,\n // True if the form elements fill the entire row\n isFullRow: true\n }\n },\n\n computed: {\n /**\n * Array containing the widths of the form elements\n * @return {Array}\n */\n elementsWidths () {\n return this.$children.map(child => child.$props.width || 'u-1-of-1') || []\n }\n },\n\n methods: {\n /**\n * Determine if the given form elements fill the entire row; if not, add padding-right\n */\n determineRowWidth () {\n if (this.elementsWidths.length > 0) {\n // U-firstWidthValue-of-y\n const firstWidthValues = this.elementsWidths.map(width => parseInt(width.match(/\\d+/)))\n // Add firstWidthValues together\n const combinedWidth = firstWidthValues.reduce((acc, curr) => {\n return acc + parseInt(curr)\n })\n // U-x-of-completeWidth\n const completeWidth = parseInt(this.elementsWidths[0].match(/\\d+$/)[0])\n this.isFullRow = completeWidth === combinedWidth\n }\n },\n\n /**\n * Add padding-right to the form element if\n * - it is not the last element in the row or\n * - it is the last element in the row, but the elements don't fill the row\n */\n setPadding () {\n this.$children.forEach(child => {\n const idx = this.$children.indexOf(child)\n if (idx < this.elementCount - 1 || (idx === this.elementCount - 1 && this.isFullRow === false)) {\n child.$el.classList.add('u-pr')\n }\n })\n }\n },\n\n mounted () {\n this.elementCount = this.$children.length\n this.determineRowWidth()\n this.setPadding()\n }\n}\n</script>\n
27
+ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
28
+ <+>UTF-8
29
+ ===================================================================
30
+ diff --git a/src/components/DpFormRow/DpFormRow.vue b/src/components/DpFormRow/DpFormRow.vue
31
+ --- a/src/components/DpFormRow/DpFormRow.vue (revision 7c37a9a7e1b33327b834347c85796e2acce6591a)
32
+ +++ b/src/components/DpFormRow/DpFormRow.vue (date 1733213132338)
33
+ @@ -33,7 +33,7 @@
34
+ * Determine if the given form elements fill the entire row; if not, add padding-right
35
+ */
36
+ determineRowWidth () {
37
+ - if (this.elementsWidths.length > 0) {
38
+ + if (this.elementsWidths.length > 0 && this.elementsWidths[0] !== 'w-full') {
39
+ // U-firstWidthValue-of-y
40
+ const firstWidthValues = this.elementsWidths.map(width => parseInt(width.match(/\d+/)))
41
+ // Add firstWidthValues together
@@ -0,0 +1,4 @@
1
+ <changelist name="Uncommitted_changes_before_Update_at_04_12_2024_08_13_[Changes]" date="1733296408408" recycled="false" toDelete="true">
2
+ <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_04_12_2024_08_13_[Changes]/shelved.patch" />
3
+ <option name="DESCRIPTION" value="Uncommitted changes before Update at 04 12 2024 08:13 [Changes]" />
4
+ </changelist>