summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/form/radios.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-12-27 14:36:33 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2022-12-27 14:36:33 +0900
commit9384f5399da39e53855beb8e7f8ded1aa56bf72e (patch)
treece5959571a981b9c4047da3c7b3fd080aa44222c /packages/frontend/src/components/form/radios.vue
parentwip: retention for dashboard (diff)
downloadmisskey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.tar.gz
misskey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.tar.bz2
misskey-9384f5399da39e53855beb8e7f8ded1aa56bf72e.zip
rename: client -> frontend
Diffstat (limited to 'packages/frontend/src/components/form/radios.vue')
-rw-r--r--packages/frontend/src/components/form/radios.vue83
1 files changed, 83 insertions, 0 deletions
diff --git a/packages/frontend/src/components/form/radios.vue b/packages/frontend/src/components/form/radios.vue
new file mode 100644
index 0000000000..bde4a8fb00
--- /dev/null
+++ b/packages/frontend/src/components/form/radios.vue
@@ -0,0 +1,83 @@
+<script lang="ts">
+import { defineComponent, h } from 'vue';
+import MkRadio from './radio.vue';
+
+export default defineComponent({
+ components: {
+ MkRadio,
+ },
+ props: {
+ modelValue: {
+ required: false,
+ },
+ },
+ data() {
+ return {
+ value: this.modelValue,
+ };
+ },
+ watch: {
+ value() {
+ this.$emit('update:modelValue', this.value);
+ },
+ },
+ render() {
+ let options = this.$slots.default();
+ const label = this.$slots.label && this.$slots.label();
+ const caption = this.$slots.caption && this.$slots.caption();
+
+ // なぜかFragmentになることがあるため
+ if (options.length === 1 && options[0].props == null) options = options[0].children;
+
+ return h('div', {
+ class: 'novjtcto',
+ }, [
+ ...(label ? [h('div', {
+ class: 'label',
+ }, [label])] : []),
+ h('div', {
+ class: 'body',
+ }, options.map(option => h(MkRadio, {
+ key: option.key,
+ value: option.props.value,
+ modelValue: this.value,
+ 'onUpdate:modelValue': value => this.value = value,
+ }, option.children)),
+ ),
+ ...(caption ? [h('div', {
+ class: 'caption',
+ }, [caption])] : []),
+ ]);
+ },
+});
+</script>
+
+<style lang="scss">
+.novjtcto {
+ > .label {
+ font-size: 0.85em;
+ padding: 0 0 8px 0;
+ user-select: none;
+
+ &:empty {
+ display: none;
+ }
+ }
+
+ > .body {
+ display: flex;
+ gap: 12px;
+ flex-wrap: wrap;
+ }
+
+ > .caption {
+ font-size: 0.85em;
+ padding: 8px 0 0 0;
+ color: var(--fgTransparentWeak);
+
+ &:empty {
+ display: none;
+ }
+ }
+}
+</style>