From 47f67b442503160afdbf699594e61e7bee43f868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Wed, 20 May 2020 20:59:19 +0200 Subject: [PATCH] Add an initial draft for file inputs. See https://github.com/w3c/csswg-drafts/issues/5049. --- research/src/images/file.png | Bin 0 -> 8434 bytes research/src/pages/file.proposal.mdx | 165 +++++++++++++++++++++++++++ research/src/pages/file.research.mdx | 19 +++ research/src/sources/carbon.json5 | 1 + research/src/sources/evergreen.json5 | 1 + research/src/sources/lightning.json5 | 1 + 6 files changed, 187 insertions(+) create mode 100644 research/src/images/file.png create mode 100644 research/src/pages/file.proposal.mdx create mode 100644 research/src/pages/file.research.mdx diff --git a/research/src/images/file.png b/research/src/images/file.png new file mode 100644 index 0000000000000000000000000000000000000000..d55f06e944b1bb447c98fd11550d6a507a599531 GIT binary patch literal 8434 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 literal 0 HcmV?d00001 diff --git a/research/src/pages/file.proposal.mdx b/research/src/pages/file.proposal.mdx new file mode 100644 index 000000000..36dd2e544 --- /dev/null +++ b/research/src/pages/file.proposal.mdx @@ -0,0 +1,165 @@ +--- +menu: Components +name: File (Editor's Draft) +path: /components/file +pathToResearch: /components/file.research +--- + +# File Input Component Specification + +## Overview + +The File Input component is a control that provides the user with the ability +to select local files. + +### Background + +File Input controls are widely used and implemented on the web. They are as of +today, the only thing that allows an application to access the local file +system, in a fairly limited but controlled way. + +### Use Cases + +The `` control is widely used to provide applications with the +capability of reading local files on form submission, or uploading files to a +server. + +### Features + +The main feature is selecting local files, potentially receiving hints from the +website about which file kinds are allowed, for example. + +### Prior Art/Examples + +#### Browser implementations + +Browsers show an interoperable rendering for file inputs, consisting of a +button and a label. + +- WebKit and Blink use an ``, and a magical label that + doesn't show up in the DOM. + +- Gecko uses an actual ` + + +``` + +It is important that the button is not tab-navigable, as the input is focused +atomically, see below. + +#### CSS Parts + +| Part Name | Description | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `file-chooser-button` | Enables styling the `<button>` or `<input type=button>` part without requiring it to be completely replaced via its slot. | + +

+We should consider exposing the `<label>`, maybe? + +Maybe even with a `<slot>` in it so that people could replace it with their own +content. + +

+ +--- + +## Behavior + +### States and Interactions + +- As a result of keyboard (either Enter or Spacebar without modifier) or mouse + / touch interaction (click), an implementation-dependent dialog will show + up. This dialog cannot be accessed by the website, but its contents and + appearance may depend on things like the `accept` attribute. + +- Dragging an file into the component may also be used to select a particular + file. + +## Accessibility + +File Inputs should be focusable via a keyboard navigation. + +#### Keyboard Navigation and Focus + +File input is focused atomically. + +

+ Seems like ideally we could delegate focus to the button, or something something... Gecko used to + do that, but I had to change it because the button exists as a result of layout (in Gecko, at + least, that is). Also input type changes would be trickier with such a setup. +

+ +#### Form Input + +This component integrates naturally with form submission as described in [the HTML spec](). + +### Globalization + +The component reacts naturally to directionality. The initial label content and +the button contents should be localized. + +### Security + +The component very intentionally doesn't expose to the outside world anything +in the local file system that hasn't been chosen by the user. + +--- + +## Resources + +- [MDN Reference for ``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file) +- [HTML Specification]() + +--- + +## Next Steps + +_What next steps, if any, are there? Is there some functionality that would be a nice-to-have or a common feature in other implementations that could be added but is not considered part of the MVP? Link all feature additions, modifications, bugs, or editorial change issues._ diff --git a/research/src/pages/file.research.mdx b/research/src/pages/file.research.mdx new file mode 100644 index 000000000..6dfa2877c --- /dev/null +++ b/research/src/pages/file.research.mdx @@ -0,0 +1,19 @@ +--- +name: File +path: /components/file.research +pathToProposal: /components/file +--- + +import Anatomy from '../components/anatomy' +import Concepts from '../components/concepts' +import ComponentCoverage from '../components/component-coverage' + + + +## Anatomy + + + +## Concepts + + diff --git a/research/src/sources/carbon.json5 b/research/src/sources/carbon.json5 index c3fe37873..7947f33b0 100644 --- a/research/src/sources/carbon.json5 +++ b/research/src/sources/carbon.json5 @@ -166,6 +166,7 @@ }, { "name": "File uploader", + "openUIName": "File", "url": "https://www.carbondesignsystem.com/components/file-uploader/code" }, { diff --git a/research/src/sources/evergreen.json5 b/research/src/sources/evergreen.json5 index c91707e49..3d1b8efca 100644 --- a/research/src/sources/evergreen.json5 +++ b/research/src/sources/evergreen.json5 @@ -151,6 +151,7 @@ }, { "name": "Filepicker", + "openUIName": "File", "definition": "The Filepicker component is used to select one or multiple filed from the file system.", "url": "https://evergreen.segment.com/components/filepicker/" }, diff --git a/research/src/sources/lightning.json5 b/research/src/sources/lightning.json5 index 61926ff6d..9d3241dca 100644 --- a/research/src/sources/lightning.json5 +++ b/research/src/sources/lightning.json5 @@ -323,6 +323,7 @@ }, { "name": "File Selector", + "openUIName": "File", "url": "https://www.lightningdesignsystem.com/components/file-selector" }, {