All examples

Select, right to left

Arabic labels in a right-to-left layout with logical padding.

Select, right to left

ui-select-rtl · texuli/Select

texuli select

Live example loads in an isolated same-origin preview frame.

Source (select/SelectRtlDemo.svelte)
<script lang="ts">
import { Select } from 'texuli/select';

const items = [
  { value: 'ar', label: 'العربية' },
  { value: 'en', label: 'English' },
  { value: 'fr', label: 'Français' },
];

let value = $state('ar');
let open = $state(true);
</script>

<section data-example="ui-select-rtl" class="demo" dir="rtl" lang="ar" aria-label="Select RTL">
  <h2>اللغة</h2>
  <p>قائمة اختيار باتجاه اليمين إلى اليسار مع تسميات مترجمة.</p>
  <Select.Root bind:value bind:open {items} name="lang">
    <Select.Trigger aria-label="اللغة">
      <Select.Value placeholder="اختر لغة" />
    </Select.Trigger>
    <Select.Portal>
      <Select.Content>
        <Select.Viewport>
          {#each items as item (item.value)}
            <Select.Item value={item.value} label={item.label}>{item.label}</Select.Item>
          {/each}
        </Select.Viewport>
      </Select.Content>
    </Select.Portal>
  </Select.Root>
</section>

<style>
  .demo {
    display: grid;
    gap: 0.75rem;
    justify-items: start;
    padding: 1.5rem;
    min-block-size: 16rem;
    color: var(--tx-foreground, CanvasText);
    background: var(--tx-background, Canvas);
  }
  h2 {
    margin: 0;
  }
  p {
    margin: 0;
    color: var(--tx-muted-foreground, GrayText);
  }
  .demo :global(.tx-select-root) {
    min-inline-size: 14rem;
  }
</style>