mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-06-02 21:49:25 +00:00
e2ab8a46ed
Some improvements to the Page Header and Tab UI. Original | New :--------:|:-------: ![image](https://user-images.githubusercontent.com/62170586/197360886-046f1016-ca39-4b69-8134-99ba88e3a0c2.png) | ![image](https://user-images.githubusercontent.com/62170586/197360819-7efd0d82-1412-465d-aefa-039164f97465.png) ![image](https://user-images.githubusercontent.com/62170586/197360872-f2ece5fd-7c0b-4e2c-8629-31524a412af5.png) | ![image](https://user-images.githubusercontent.com/62170586/197360830-49f09e0d-619e-4fa9-8e38-8d05d9404185.png) ![image](https://user-images.githubusercontent.com/62170586/197281776-e3de6441-9417-4614-8b25-1aaef0b8da61.png) | ![image](https://user-images.githubusercontent.com/62170586/197281698-40c66d34-76f3-4fd5-97e3-1c422b74844c.png) ![image](https://user-images.githubusercontent.com/62170586/196609248-ff150c6e-2995-4bcc-8573-49ffaf388446.png) | ![image](https://user-images.githubusercontent.com/62170586/197323734-7c1a1b79-0f41-4bf2-96a3-dd38df9e1415.png) ![image](https://user-images.githubusercontent.com/62170586/196609329-b7a6f37e-e8c2-4004-a98b-73f837122ff8.png) | ![image](https://user-images.githubusercontent.com/62170586/197323882-10141ffd-7411-4493-8291-b8000adc3cc5.png) What? - Create a new Scaffold component, which includes the header and tabs required for a page. - Use this component to wrap all the views that have a header. - Ensures consistency in headers between different pages. - [x] Add support to use custom html/component in place of title (for repo page, pipeline page, etc) - [x] Add support of right icon buttons (for repo page, pipeline page, etc) - [x] Refactor tabs handling using compositions (useTabsProvider, useTabsClient) - [x] Make new header ui resposive
84 lines
1.7 KiB
Vue
84 lines
1.7 KiB
Vue
<template>
|
|
<div
|
|
class="w-full border border-gray-200 py-1 px-2 rounded-md bg-white hover:border-gray-300 dark:bg-dark-gray-700 dark:border-dark-400 dark:hover:border-dark-800"
|
|
:class="{ 'bg-gray-200 dark:bg-gray-600': disabled }"
|
|
>
|
|
<input
|
|
v-if="lines === 1"
|
|
v-model="innerValue"
|
|
class="w-full bg-transparent text-color focus:outline-none focus:border-blue-400"
|
|
:class="inputClass"
|
|
:disabled="disabled"
|
|
:type="type"
|
|
:placeholder="placeholder"
|
|
/>
|
|
<textarea
|
|
v-else
|
|
v-model="innerValue"
|
|
class="w-full bg-transparent text-color focus:outline-none focus:border-blue-400"
|
|
:class="inputClass"
|
|
:disabled="disabled"
|
|
:placeholder="placeholder"
|
|
:rows="lines"
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { computed, defineComponent, toRef } from 'vue';
|
|
|
|
export default defineComponent({
|
|
name: 'TextField',
|
|
|
|
props: {
|
|
modelValue: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
|
|
placeholder: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
|
|
type: {
|
|
type: String,
|
|
default: 'text',
|
|
},
|
|
|
|
lines: {
|
|
type: Number,
|
|
default: 1,
|
|
},
|
|
|
|
disabled: {
|
|
type: Boolean,
|
|
},
|
|
|
|
inputClass: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
},
|
|
|
|
emits: {
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
'update:modelValue': (_value: string): boolean => true,
|
|
},
|
|
|
|
setup: (props, ctx) => {
|
|
const modelValue = toRef(props, 'modelValue');
|
|
const innerValue = computed({
|
|
get: () => modelValue.value,
|
|
set: (value) => {
|
|
ctx.emit('update:modelValue', value);
|
|
},
|
|
});
|
|
|
|
return {
|
|
innerValue,
|
|
};
|
|
},
|
|
});
|
|
</script>
|