kopia lustrzana https://github.com/shoelace-style/shoelace
				
				
				
			update docs
							rodzic
							
								
									b63368d5f6
								
							
						
					
					
						commit
						402a00dcd3
					
				| 
						 | 
				
			
			@ -160,6 +160,7 @@
 | 
			
		|||
    "unbundles",
 | 
			
		||||
    "unbundling",
 | 
			
		||||
    "unicons",
 | 
			
		||||
    "unsanitized",
 | 
			
		||||
    "unsupportive",
 | 
			
		||||
    "valpha",
 | 
			
		||||
    "valuenow",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -457,55 +457,50 @@ const App = () => (
 | 
			
		|||
 | 
			
		||||
### Custom Tags
 | 
			
		||||
 | 
			
		||||
When multiple options can be selected, you can provide custom tags by passing a function to the `getTag` property.
 | 
			
		||||
Your `getTag(option, index)` function can return a string, a Lit <a href="https://lit.dev/docs/templates/overview/">Template</a>,
 | 
			
		||||
or an HTMLElement.
 | 
			
		||||
When multiple options can be selected, you can provide custom tags by passing a function to the `getTag` property. Your function can return a string of HTML, a <a href="https://lit.dev/docs/templates/overview/">Lit Template</a>, or an [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement). The `getTag()` function will be called for each option. The first argument is an `<sl-option>` element and the second argument is the tag's index (its position in the tag list).
 | 
			
		||||
 | 
			
		||||
Remember that custom tags are rendered in a shadow root. To style them, you can use the `style` attribute in your template or you can add your own [parts](/getting-started/customizing/#css-parts) and target them with the [`::part()`](https://developer.mozilla.org/en-US/docs/Web/CSS/::part) selector.
 | 
			
		||||
 | 
			
		||||
```html:preview
 | 
			
		||||
<sl-select placeholder="Select" value="option-1 option-2" class="custom-tag" multiple clearable>
 | 
			
		||||
  <sl-option value="option-1">
 | 
			
		||||
<sl-select
 | 
			
		||||
  placeholder="Select one"
 | 
			
		||||
  value="email phone"
 | 
			
		||||
  multiple
 | 
			
		||||
  clearable
 | 
			
		||||
  class="custom-tag"
 | 
			
		||||
>
 | 
			
		||||
  <sl-option value="email">
 | 
			
		||||
    <sl-icon slot="prefix" name="envelope"></sl-icon>
 | 
			
		||||
    Email
 | 
			
		||||
    <sl-icon slot="suffix" name="patch-check"></sl-icon>
 | 
			
		||||
  </sl-option>
 | 
			
		||||
 | 
			
		||||
  <sl-option value="option-2">
 | 
			
		||||
  <sl-option value="phone">
 | 
			
		||||
    <sl-icon slot="prefix" name="telephone"></sl-icon>
 | 
			
		||||
    Phone
 | 
			
		||||
    <sl-icon slot="suffix" name="patch-check"></sl-icon>
 | 
			
		||||
  </sl-option>
 | 
			
		||||
 | 
			
		||||
  <sl-option value="option-3">
 | 
			
		||||
  <sl-option value="chat">
 | 
			
		||||
    <sl-icon slot="prefix" name="chat-dots"></sl-icon>
 | 
			
		||||
    Chat
 | 
			
		||||
    <sl-icon slot="suffix" name="patch-check"></sl-icon>
 | 
			
		||||
  </sl-option>
 | 
			
		||||
  <sl-option value="option-4">Option 4</sl-option>
 | 
			
		||||
  <sl-option value="option-5">Option 5</sl-option>
 | 
			
		||||
</sl-select>
 | 
			
		||||
 | 
			
		||||
<script type="module">
 | 
			
		||||
  import {html} from "https://cdn.jsdelivr.net/npm/lit@2.8.0/+esm";
 | 
			
		||||
 | 
			
		||||
  const select = document.querySelector('.custom-tag');
 | 
			
		||||
 | 
			
		||||
  select.getTag = (option, index) => {
 | 
			
		||||
    const icons = {'option-1': 'envelope', 'option-2': 'telephone', 'option-3': 'chat-dots'};
 | 
			
		||||
    if(typeof icons[option.value] == "undefined") {
 | 
			
		||||
      // Return a string
 | 
			
		||||
      return "<sl-tag removable>"+
 | 
			
		||||
        "<sl-icon part=\"tag-icon\" name=\"patch-question\"></sl-icon>" +
 | 
			
		||||
        option.getTextLabel() +
 | 
			
		||||
        "</sl-tag>"
 | 
			
		||||
    } else {
 | 
			
		||||
      // Return a Lit template
 | 
			
		||||
      return html`<sl-tag removable>
 | 
			
		||||
        <sl-icon part="tag-icon" name="${ icons[option.value] }"></sl-icon>
 | 
			
		||||
        ${ option.getTextLabel() }
 | 
			
		||||
      </sl-tag>`;
 | 
			
		||||
    }
 | 
			
		||||
    // Use the same icon used in the <sl-option>
 | 
			
		||||
    const name = option.querySelector('sl-icon[slot="prefix"]').name;
 | 
			
		||||
 | 
			
		||||
    // You can return a string, a Lit Template, or an HTMLElement here
 | 
			
		||||
    return `
 | 
			
		||||
      <sl-tag removable>
 | 
			
		||||
        <sl-icon name="${name}" style="padding-inline-end: .5rem;"></sl-icon>
 | 
			
		||||
        ${option.getTextLabel()}
 | 
			
		||||
      </sl-tag>
 | 
			
		||||
    `;
 | 
			
		||||
  };
 | 
			
		||||
  </script>
 | 
			
		||||
  <style>
 | 
			
		||||
    .custom-tag::part(tag-icon) { padding-right: var(--sl-spacing-small); }
 | 
			
		||||
  </style>
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
:::warning
 | 
			
		||||
Be sure you trust the content you are outputting! Passing unsanitized user input to `getTag()` can result in XSS vulnerabilities.
 | 
			
		||||
:::
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue